yolov5全面解析教程②:如何制作训练效果更好的数据集(代码片段)

OneFlow深度学习框架 OneFlow深度学习框架     2022-12-26     182

关键词:



撰文 | Fengwen, BBuf

本文主要介绍 One-YOLOv5 使用的数据集格式以及如何制作一个可以获得更好训练效果的数据集。本节教程的数据集标准部分翻译了 Ultralytics/YOLOv5 wiki 中对数据集相关的描述(https://github.com/ultralytics/yolov5/wiki/Tips-for-Best-Training-Results) 。

代码仓库地址:

https://github.com/Oneflow-Inc/one-yolov5

本系列教程原文点击 

https://start.oneflow.org/oneflow-yolo-doc可达(保持动态更新教程和源码解读和修复一些bug)。

1

数据集结构解读

1. 创建dataset.yaml

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

数据集配置文件 coco128.yaml 

(https://github.com/Oneflow-Inc/one-yolov5/blob/master/data/coco128.yaml) 定义了如下的配置选项:

# 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/ultralytics/yolov5/wiki/Tips-for-Best-Training-Results

  • https://docs.ultralytics.com/tutorials/train-custom-datasets/#weights-biases-logging-new

其他人都在看

yolov5全面解析教程③:更快更好的边界框回归损失

作者|Fengwen、BBuf边界框回归是目标检测的关键步骤,在现有方法中,虽然被广泛用于边界框回归,但它不是针对评估指标量身定制的,即IntersectionoverUnion(IoU)。最近,已经提出了IoU损失和generalizedIoU(GIoU)Los... 查看详情

一个更快的yolov5问世,附送全面中文解析教程

...模型的可行性以及性能的优越性,我们将Ultralytics版YOLOv5(https://github.com/ultralytics/yolov5)通过importoneflowastorch的方式迁移为OneFlow后端(对应YOLOv5的commit为:48a85314bc80d8023c99bfb114cea98d71dd0591)。相比PyTorch,... 查看详情

stablediffusion半秒出图;vliw的前世今生;yolov5全面解析教程|ai系统前沿动态

 1.StableDiffusion采样速度翻倍!仅需10到25步的扩散模型采样算法自研深度学习编译器技术的OneFlow团队更是在不降低采样效果的前提下,成功将之前的“一秒出图”缩短到了“半秒出图”!在GPU上仅仅使用不到0.5秒就可... 查看详情

yolov5解析|第二篇:用yolov5训练自己的数据集(超级详细完整版)(代码片段)

大家好,我是K同学啊!我们接着上一篇文章YOLOv5解析|第一篇:快速部署YOLOv5模型配置完YOLOv5需要的环境后,今天我们试着用YOLOv5训练自己的数据。(在开始本教程前,记得先跑一遍入门篇,确保其他... 查看详情

yolov5解析|第二篇:用yolov5训练自己的数据集(超级详细完整版)(代码片段)

大家好,我是K同学啊!我们接着上一篇文章YOLOv5解析|第一篇:快速部署YOLOv5模型配置完YOLOv5需要的环境后,今天我们试着用YOLOv5训练自己的数据。(在开始本教程前,记得先跑一遍入门篇,确保其他... 查看详情

yolov5解析|第三篇:如何改进yolov5?(代码片段)

大家好,我是K同学啊!在前面的文章YOLOv5解析|第二篇:用YOLOv5训练自己的数据集(超级详细完整版)中我们介绍了使用训练自己的数据集。这一篇文章,我将带大家一起解析YOLOv5的6.0版本结构并改进模型&... 查看详情

yolov5全面解析教程⑤:计算map用到的numpy函数详解

作者| Fengwen、BBuf本文主要介绍在One-YOLOv5项目中计算mAP用到的一些numpy操作,这些numpy操作使用在utils/metrics.py中。本文是《YOLOv5全面解析教程④:目标检测模型精确度评估》的补充,希望能帮助到小伙伴们。欢迎Star、... 查看详情

博客3:yolov5车牌识别实战教程:模型训练与评估(代码片段)

摘要:本篇博客将详细介绍如何使用YOLOv5进行车牌识别模型的训练与评估。我们将搭建训练环境、准备数据、配置模型参数、启动训练过程,以及使用验证集评估模型性能。车牌识别视频正文:3.1搭建训练环境 首先,我们需... 查看详情

yolov5全面解析教程④:目标检测模型精确度评估

...仓库地址,欢迎Star:https://github.com/Oneflow-Inc/one-yolov51指标评估(一些重要的定义)IOU(IntersectionOverUnion) 基于Jaccard索引,用于评估两个边界框之间的重叠程度。它需要一个真实回归框(agroundtruthboundingbox) 和一... 查看详情

yolov5坐标相关的判断与转换,评价指标,训练结果解析

文章大纲工程化实现为什么推荐yolov5yolo坐标归一化像素坐标转yoloyolo坐标转像素坐标yolov5坐标的输出,抠图评价指标训练与模型优化参考文献与学习路径工程化实现为什么推荐yolov5可以看看下面的issue,这是我在使用中发现的,y... 查看详情

yolov5坐标相关的判断与转换,评价指标,训练结果解析

文章大纲工程化实现为什么推荐yolov5yolo坐标归一化像素坐标转yoloyolo坐标转像素坐标yolov5坐标的输出,抠图评价指标训练与模型优化参考文献与学习路径工程化实现为什么推荐yolov5可以看看下面的issue,这是我在使用中发现的,y... 查看详情

[课程][原创]yolov5安装标注训练自己数据集windows版

搞定系列:yolov5训练自己数据集windows版课程地址:搞定系列:yolov5训练自己数据集windows版--深度学习视频教程-人工智能-CSDN程序员研修院开会员学更多课程课程介绍课程目录讨论留言你将收获1、学会如何搭建yolov5环... 查看详情

[课程][原创]使用yolov5训练自己实例分割模型windows版

搞定系列:yolov5训练自己的实例分割模型windows版课程地址:搞定系列:yolov5训练自己的实例分割模型windows版--深度学习视频教程-人工智能-CSDN程序员研修院14节节数课程介绍课程目录讨论留言你将收获学会安装yolov5环境学会转... 查看详情

yolov5——train.py代码注释详解使用教程(代码片段)

yolov5——train.py代码【注释、详解、使用教程】yolov5——train.py代码【注释、详解、使用教程】yolov5——train.py代码【注释、详解、使用教程】前言1.parse_opt函数2.main函数2.1main函数——打印关键词/安装环境2.2main函数——是否进行... 查看详情

深度学习和目标检测系列教程17-300:3个类别面罩检测类别数据集训练yolov5s模型(代码片段)

@Author:RunsenYOLO是目前最火爆的的计算机视觉算法之一,今天使用的数据集来源:https://www.kaggle.com/andrewmvd/face-mask-detection这是数据集可以创建一个模型来检测戴口罩、不戴口罩或不正确戴口罩的人。该数据集包含... 查看详情

yolov5-6.0快速训练助手使用教程傻瓜式训练不需要写代码配置

yolov5-6.0发布后,这次更新为我们带来了n版本,模型大幅度减少,yolov5n仅仅3.77M,适合在嵌入式部署。为了跟上时代发展要求,yolov5-6.0快速训练助手更新出来。本此更新依旧面向懒人和初学者,使用非常简... 查看详情

yolov5的tricks|trick13yolov5的detect.py脚本的解析与简化(代码片段)

如有错误,恳请指出。在之前介绍了一堆yolov5的训练技巧,train.py脚本也介绍得差不多了。之后还有detect和val两个脚本文件,还想把它们总结完。在之前测试yolov5训练好的模型时,用detect.py脚本简直不要太方便ÿ... 查看详情

yolov5训练自己的数据集(详细完整版)(代码片段)

...thon:3.9ps:如果要使用GPU,cuda版本要>=10.1下载安装yolov5:yolov5官方要求Python>=3.6andPyTorch>=1.7yolov5源码下载:https://github.com/ultralytics/yolov5下载后,进入pytorch环境进入yolov5文件夹使用换源的方法安装依赖... 查看详情