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

撰文 | Fengwen, BBuf

本文首要介绍 One-YOLOv5 运用的数据集格局以及如何制造一个能够获得更好练习作用的数据集。本节教程的数据集标准部分翻译了 Ultralytics/YOLOv5 wiki 中对数据集相关的描述(github.com/ultralytics…

代码库房地址:

github.com/Oneflow-Inc…

本系列教程原文点击

start.oneflow.org/oneflow-yol… 可达(坚持动态更新教程和源码解读和修复一些bug)。

1

数据集结构解读

1. 创建dataset.yaml

COCO128是官方给的一个小的数据集 由COCO(cocodataset.org/#home) 数据集前 128 张图片组成。这128幅图画用于练习和验证,判别 YOLOv5 脚本是否能够过正常进行。

数据集装备文件 coco128.yaml

(github.com/Oneflow-Inc…) 界说了如下的装备选项:

# 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表明:

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

2. 创建 Labels

运用东西例如CVAT(github.com/opencv/cvat), makesense.ai(www.makesense.ai/“),Labelbo… LabelImg(鄙人一节制造数据会集介绍LabelImg东西运用) 等,在你自己的数据集提供的图片上做方针框的标示,将标示信息导出为一个txt后缀结束的文件。(假如图画中没有方针,则不需求*.txt文件)。

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

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

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

这儿假定以 COCO 数据集的方针类别约定来标示

与上述图画相对应的标签文件包括2个人(class 0)和 一个领带(class 27):

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

3. COCO128 数据集目录结构安排

在本例中,咱们的coco128是坐落YOLOv5目录附近。YOLOv5经过将每个图画途径xx/images/xx.jpg替换为xx/labels/xx.txt来主动定位每个图画的标签。例如:

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

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

coco 和 coco128 数据集安排结构

2

制造数据集

1. 数据集标示东西

这儿首要介绍 LabelImg 是一种矩形标示东西,常用于方针辨认和方针检测,可直接生成 YOLOv5 读取的txt标签格局,但其只能进行矩形框标示(当然也能够选用其它的东西进行标示而且网上都有很多关于标示东西的教程。)

首要labelimg的装置十分简略,直接运用cmd中的pip进行装置,在cmd中输入命令行:

pip install labelimg

装置后直接输入命令:

labelimg

即可翻开运转。

点击Open Dir挑选数据集文件夹,再点击Create RectBox进行标示。

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

当你制作框结束就会弹出标签挑选框,然后标示类别。这个类别编辑更改在Labelimg文件里,里边有classes.txt文档,翻开手动更改类别即可(当呈现新类别时也可在标签挑选框里输入点OK就主动添加类别了)。

标示好后挑选 yolo 格局,点击 Save 保存。标示结果保存在图片名.txt文件中,txt文件和图片称号一致,内容如下:

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

3

一个好的数据集标准?

  • 每个类的图画。>= 1500 张图片。

  • 每个类的实例。≥ 主张每个类10000个实例(符号目标)

  • 图片形象多样。有必要代表已部署的环境。关于实际国际的运用案例,咱们推荐来自一天中不同时刻、不同季节、不同气候、不同照明、不同视点、不同来历(在线收集、本地收集、不同摄像机)等的图画。

  • 标签一致性。有必要符号一切图画中一切类的一切实例。部分符号将不起作用。

  • 标签准确性。

  • 标签有必要严密地围住每个目标。目标与其鸿沟框之间不应存在任何空间。任何目标都不应缺少标签。

  • 标签验证。查看train_batch*.jpg 在 练习开端验证标签是否正确,即拜见 mosaic (在 YOLOv5 的练习日志 runs/train/exp* 文件夹里边能够看到)。

  • 背景图画。背景图画是没有添加到数据集以削减 False Positives(FP)的目标的图画。咱们主张运用大约0-10%的背景图画来帮助削减FPs(COCO有1000个背景图画供参阅,占总数的1%)。背景图画不需求标签。

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

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

其间:

  • 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

参阅文章

  • github.com/ultralytics…
  • docs.ultralytics.com/tutorials/t…

欢迎 Star、试用 OneFlow 最新版本:

github.com/Oneflow-Inc…