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

撰文 | 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文件规范如下所示:

这里假设以 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

一个好的数据集标准?


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

其中:

4

参考文章

欢迎 Star、试用 OneFlow 最新版本:
https://github.com/Oneflow-Inc/oneflow/

展开阅读全文

页面更新:2024-04-13

标签:数据   路径   实例   图像   对象   类别   效果   目标   标签   文件   工具   教程

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top