关于算法:YOLOv5全面解析教程②如何制作训练效果更好的数据集

1次阅读

共计 3761 个字符,预计需要花费 10 分钟才能阅读完成。

撰文 | Fengwen, BBuf

本文次要介绍 One-YOLOv5 应用的数据集格局以及如何制作一个能够取得更好训练成果的数据集。本节教程的数据集规范局部翻译了 Ultralytics/YOLOv5 wiki 中对数据集相干的形容(https://github.com/ultralytic…)。

代码仓库地址:
https://github.com/Oneflow-In…

本系列教程原文点击
https://start.oneflow.org/one… 可达(放弃动静更新教程和源码解读和修复一些 bug)。

1

数据集构造解读

1. 创立 dataset.yaml

COCO128 是官网给的一个小的数据集 由 COCO(https://cocodataset.org/#home)数据集前 128 张图片组成。这 128 幅图像用于训练和验证,判断 YOLOv5 脚本是否可能过失常进行。

数据集配置文件 coco128.yaml
(https://github.com/Oneflow-In…) 定义了如下的配置选项:

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Example usage: python train.py --data coco128.yaml
# parent
# ├── one-yolov5
# └── datasets
#     └── coco128  ← downloads here (7 MB)

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]

# 训练和验证图像的门路雷同
train: ../coco128/images/train2017/ 
val: ../coco128/images/train2017/

# number of classes
nc: 80 # 类别数

# class names 类名列表
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']


# Download script/URL (optional) 用于主动下载的可选下载命令 /URL。download: https://ultralytics.com/assets/coco128.zip

留神:如果是自定义数据集的话按本人需要批改这个 yaml 文件。次要批改以下两点。

  1. 批改训练和验证图像的门路为自定义数据集门路
  2. 批改类别数和类名列表

再展现一下 coco.yaml 的数据集门路配置,这里的训练和验证图像的门路就是间接用 txt 示意:

2. 创立 Labels

应用工具例如 CVAT (https://github.com/opencv/cvat), makesense.ai (https://www.makesense.ai/),Labelbox (https://labelbox.com/),LabelImg(在下一节制作数据集中介绍 LabelImg 工具应用) 等,在你本人的数据集提供的图片上做指标框的标注,将标注信息导出为一个 txt 后缀结尾的文件。(如果图像中没有指标,则不须要 *.txt 文件)。

*.txt 文件标准如下所示:

  • 每一行 一个指标。
  • 每一行是 class x_center y_center width height 格局。
  • 框坐标必须采纳标准化 xywh 格局(从 0 到 1)。如果框以像素为单位,则将 x_center 和 width 除以图像宽度,将 y_centre 和 height 除以图像高度。
  • 类号为零索引的编号(从 0 开始计数)。

这里假如以 COCO 数据集的指标类别约定来标注

与上述图像绝对应的标签文件蕴含 2 集体(class 0)和 一个领带(class 27):

3. COCO128 数据集目录构造组织

在本例中,咱们的 coco128 是位于 YOLOv5 目录左近。YOLOv5 通过将每个图像门路 xx/images/xx.jpg 替换为 xx/labels/xx.txt 来主动定位每个图像的标签。例如:

dataset/images/im0.jpg  # image
dataset/labels/im0.txt  # label

coco 和 coco128 数据集组织构造

2

制作数据集

1. 数据集标注工具

这里次要介绍 LabelImg 是一种矩形标注工具,罕用于指标辨认和指标检测,可间接生成 YOLOv5 读取的 txt 标签格局,但其只能进行矩形框标注(当然也能够选用其它的工具进行标注并且网上都有大量对于标注工具的教程。)

首先 labelimg 的装置非常简略,间接应用 cmd 中的 pip 进行装置,在 cmd 中输出命令行:

pip install labelimg

装置后间接输出命令:

labelimg

即可关上运行。

点击 Open Dir 抉择数据集文件夹,再点击 Create RectBox 进行标注。

当你绘制框完结就会弹出标签抉择框,而后标注类别。这个类别编辑更改在 Labelimg 文件里,外面有 classes.txt 文档,关上手动更改类别即可(当呈现新类别时也可在标签抉择框里输出点 OK 就主动增加类别了)。

标注好后抉择 yolo 格局,点击 Save 保留。标注后果保留在图片名.txt 文件中,txt 文件和图片名称统一,内容如下:

3

一个好的数据集规范?

  • 每个类的图像。>= 1500 张图片。
  • 每个类的实例。≥ 倡议每个类 10000 个实例(标记对象)
  • 图片形象多样。必须代表已部署的环境。对于事实世界的应用案例,咱们举荐来自一天中不同工夫、不同节令、不同天气、不同照明、不同角度、不同起源(在线采集、本地采集、不同摄像机)等的图像。
  • 标签一致性。必须标记所有图像中所有类的所有实例。局部标记将不起作用。
  • 标签准确性。
  • 标签必须严密地突围每个对象。对象与其边界框之间不应存在任何空间。任何对象都不应短少标签。
  • 标签验证。查看 train_batch.jpg 在 训练开始验证标签是否正确,即参见 mosaic(在 YOLOv5 的训练日志 runs/train/exp 文件夹外面能够看到)。
  • 背景图像。背景图像是没有增加到数据集以缩小 False Positives(FP)的对象的图像。咱们倡议应用大概 0 -10% 的背景图像来帮忙缩小 FPs(COCO 有 1000 个背景图像供参考,占总数的 1%)。背景图像不须要标签。

下图展现了多种数据集的标签特点:

其中:

  • Instances per category 示意每个类别的实例数
  • Categories per image 示意每幅图像的类别
  • (a) Instances per image 示意每幅图像的实例数
  • (b) Number of categories vs. number of instances 示意类别数目 vs 实例数目(咱们能够看到 COCO 数据集的类别和实例的数目达到了一个较好的均衡)
  • (c) Instance size 示意实例个数
  • (d) Number of categories 示意类别数
  • (e) Percent of image size 示意图像大小百分比

4

参考文章

  • https://github.com/ultralytic…
  • https://docs.ultralytics.com/…

欢送 Star、试用 OneFlow 最新版本:https://github.com/Oneflow-In…

正文完
 0