GitHub上YOLOv5开源代码的训练数据定义
GitHub上YOLOv5开源代码的训练数据定义
代码地址:https://github.com/ultralytics/YOLOv5
训练数据定义地址:https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data
YOLOv5训练自定义数据
本指南说明了如何使用YOLOv5 训练自己的自定义数据集。
开始之前
copy此仓库,下载教程数据集,并安装requirements.txt依赖项,包括Python> = 3.7和PyTorch> = 1.5。
git clone https://github.com/ultralytics/yolov5 # clone repo
python3 -c "from yolov5.utils.google_utils import gdrive_download; gdrive_download('1n_oKgR81BJtqk75b00eAjdv03qVCQn2f','coco128.zip')" # download dataset
cd yolov5
pip install -U -r requirements.txt
训练自定义数据
1.创建Dataset.yaml
data / coco128.yaml是一个小型教程数据集,由COCO train2017 中的前128张图像组成。在此示例中,这些相同的128张图像用于训练和验证。coco128.yaml定义1)训练图像目录的路径(或带有训练图像列表的* .txt文件的路径),2)与的验证图像相同的路径,3)类数,4)类列表名称:
#训练和Val的数据集(图像目录或* .txt与图像路径文件)
训练: ../coco128/images/train2017/
VAL: ../coco128/images/train2017/
类数量
#类名称
名称: [“人”,“自行车”,“汽车”,“摩托车”,“飞机”,“公共汽车”,“训练”,“卡车”,“船”,“交通灯”,
“消火栓” ”,“停车标志”,“停车计时器”,“长凳”,“鸟”,“猫”,“狗”,“马”,“绵羊”,“牛”,
“大象”,“熊”,“斑马” ','长颈鹿','背包','雨伞','手提包','领带','手提箱','飞盘',# parameters
nc: 80 # number of classes <------------------ UPDATE to match your dataset
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
# anchors
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 backbone
backbone:
# [from, number, module, args]
[[-1, 1, Focus, [64, 3]], # 1-P1/2
[-1, 1, Conv, [128, 3, 2]], # 2-P2/4
[-1, 3, Bottleneck, [128]],
[-1, 1, Conv, [256, 3, 2]], # 4-P3/8
[-1, 9, BottleneckCSP, [256, False]],
[-1, 1, Conv, [512, 3, 2]], # 6-P4/16
[-1, 9, BottleneckCSP, [512, False]],
[-1, 1, Conv, [1024, 3, 2]], # 8-P5/32
[-1, 1, SPP, [1024, [5, 9, 13]]],
[-1, 12, BottleneckCSP, [1024, False]], # 10
]
# yolov5 head
head:
[[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 12 (P5/32-large)
[-2, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 6], 1, Concat, [1]], # cat backbone P4
[-1, 1, Conv, [512, 1, 1]],
[-1, 3, BottleneckCSP, [512, False]],
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 16 (P4/16-medium)
[-2, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 4], 1, Concat, [1]], # cat backbone P3
[-1, 1, Conv, [256, 1, 1]],
[-1, 3, BottleneckCSP, [256, False]],
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 21 (P3/8-small)
[[], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
]
2. 创建标签
使用Labelbox或CVAT等工具标记图像后,将标签导出为darknet格式,每个图像一个*.txt文件(如果图像中没有对象,则不需要*.txt文件)。*.txt文件规范如下:
每个对象一行
每一行是类x_center,y_center宽度高度格式。
框坐标必须是标准化的xywh格式(从0到1)。如果方框以像素为单位,请将x_center和宽度除以图像宽度,将y_center和高度除以图像高度。
类号是零索引的(从0开始)。
每个图像的标签文件应该可以通过在其路径名中将/image s/*.jpg替换为/labels/*.txt来定位。图像和标签对的示例如下:
dataset/images/train2017/000000109622.jpg # image
dataset/labels/train2017/000000109622.txt # label
一个有5个人的标签文件示例(所有0类):

3. 组织目录
根据下面的示例组织您的train和val图像和标签。注意/coco128应该在/yolov5目录旁边。确保coco128/labels文件夹位于coco128/images文件夹旁边。

4. 选择模型
从./models文件夹中选择一个模型。在这里,选择yolov5s.yaml,最小和最快的型号。请参阅的自述表,了解所有型号的完整比较。一旦您选择了一个模型,如果您没有训练COCO,请更新yaml文件中的nc:80参数,以匹配步骤1中数据集中的类数。
# parameters
nc: 80 # number of classes <------------------ UPDATE to match your dataset
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
# anchors
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 backbone
backbone:
# [from, number, module, args]
[[-1, 1, Focus, [64, 3]], # 1-P1/2
[-1, 1, Conv, [128, 3, 2]], # 2-P2/4
[-1, 3, Bottleneck, [128]],
[-1, 1, Conv, [256, 3, 2]], # 4-P3/8
[-1, 9, BottleneckCSP, [256, False]],
[-1, 1, Conv, [512, 3, 2]], # 6-P4/16
[-1, 9, BottleneckCSP, [512, False]],
[-1, 1, Conv, [1024, 3, 2]], # 8-P5/32
[-1, 1, SPP, [1024, [5, 9, 13]]],
[-1, 12, BottleneckCSP, [1024, False]], # 10
]
# yolov5 head
head:
[[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 12 (P5/32-large)
[-2, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 6], 1, Concat, [1]], # cat backbone P4
[-1, 1, Conv, [512, 1, 1]],
[-1, 3, BottleneckCSP, [512, False]],
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 16 (P4/16-medium)
[-2, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 4], 1, Concat, [1]], # cat backbone P3
[-1, 1, Conv, [256, 1, 1]],
[-1, 3, BottleneckCSP, [256, False]],
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 21 (P3/8-small)
[[], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
]
5.训练
运行以下训练命令以训练coco128.yaml5个时期。您可以通过传递从零开始训练yolov5,也可以--cfg yolov5s.yaml --weights ''通过传递匹配的权重文件从预训练的检查点进行训练:--cfg yolov5s.yaml --weights yolov5s.pt。
# Train yolov5s on coco128 for 5 epochs
$ python train.py --img 640 --batch 16 --epochs 5 --data ./data/coco128.yaml --cfg ./models/yolov5s.yaml --weights ''
6.可视化
训练开始后,查看train*.jpg图像以查看训练图像,标签和增强效果。请注意,镶嵌数据加载器用于训练(如下所示),这是由Ultralytics开发并在YOLOv4中首次使用的新数据加载概念。如果这些图像中的标签不正确,则说明您的数据标签不正确,应重新访问2.创建标签。

在第一个阶段完成后,查看test_batch0_gt.jpg以查看测试批次0地面真相标签:

并查看test_batch0_pred.jpg以查看测试批次0的预测:

训练损失和绩效指标将保存到Tensorboard以及results.txt日志文件中。训练完成后results.txt绘制results.png。results.txt可以用绘制部分完成的文件from utils.utils import plot_results; plot_results()。在这里,显示从coco128到100个纪元训练的yolov5,从零开始(橙色),从预训练的yolov5s.pt权重(蓝色)开始:

GitHub上YOLOv5开源代码的训练数据定义的更多相关文章
- 【git】Github上面的开源代码怎么在本地编译运行
最近才发现Github是一个好东西,可以从上面学到很多东西,不说了,赶快写完去学习去... 1.首先你可以看看这个开源项目的README.md,一般一般这里都会有项目的使用方式以及一些注意的点 2.你 ...
- 使用BigQuery分析GitHub上的C#代码
一年多以前,Google 在GitHub中提供了BigQuery用于查询的GitHub上的开源代码(open source code on GitHub available for querying) ...
- 如何参与github上的开源项目
今晚比较闲,于是乎装修了一下博客,顺便将一块心病(怎么参加github上的开源项目)解决了,最后发个文章总结下 这些是参考的链接 http://blog.csdn.net/five3/article/ ...
- GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。
1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...
- Github上Laravel开源排行榜Star数61-90名
Github上Laravel开源排行榜Star数61-90名,罗列所有 Laravel 开源扩展包,含 Github Star 数量,下载数量和项目简介.默认排序是按Star数量从多到少来排 61.c ...
- Github上Laravel开源排行榜Star数31-60名
Github上Laravel开源排行榜Star数31-60名,罗列所有 Laravel 开源扩展包,含 Github Star 数量,下载数量和项目简介.默认排序是按Star数量从多到少来排 31.c ...
- Github上Laravel开源排行榜Star数前30名
Github上Laravel开源排行榜前30名,罗列所有 Laravel 开源扩展包,含 Github Star 数量,下载数量和项目简介.默认排序是按Star数量从多到少来排 1.cachethq/ ...
- Pull Request的正确打开方式(如何在GitHub上贡献开源项目)
Pull Request的正确打开方式(如何在GitHub上贡献开源项目) GitHub的官方帮助如下: Fork A Repo: https://help.github.com/articles/f ...
- 使用github上的开源框架SlidingMenu环境的搭建,以及getSupportActionBar方法不能找到的问题
http://blog.csdn.net/lovexieyuan520/article/details/9814273 使用github上的开源框架SlidingMenu环境的搭建,以及getSupp ...
随机推荐
- 病毒木马查杀实战第024篇:MBR病毒之编程解析引导区
前言 通过之前的学习,相信大家已经对磁盘的引导区有了充分的认识.但是我们之前的学习都是利用现成的工具来对引导区进行解析的,而对于一名反病毒工程师而言,不单单需要有扎实的逆向分析功底,同时也需要有很强的 ...
- UVA11300分金币
题意: 圆桌旁作者n个人,每个人都有一定数量的金币,他们每次可以给相邻的人一枚金币(可以给多次),问所有人金币数都相同的话最少要给多少次金币.思路: 这个题目感觉很好,首先我们可 ...
- android安全学习、工具库、框架
在介绍android工具之前,先理清android中出现的文件格式: java:android源码 class:java编译后生成: dex: 由dx工具编译class而成,由dalvik执行: sm ...
- CVE-2012-1876:Internet Exporter MSHTML.DLL CaculateMinMax 堆溢出简单分析
0x01 2012 Pwn2Own 黑客大赛 Pwn2Own 是世界上最著名的黑客大赛,意在激励白帽黑客们进行顶尖的安全研究.在 2012 年 Pwn2Own 大赛上,来自法国著名的安全团队 Vupe ...
- CTFHub-easy_search
easy_search 玩了好些天,今天做道题找找状态,明天开始肝了 打开是一个登录框 用amdin/admin尝试了一下,提示登陆失败 这里肯定不会是暴力破解,我猜是sql注入,试了万能密码or 1 ...
- Andrew Ng机器学习算法入门(三):线性回归算法
线性回归 线性回归,就是能够用一个直线较为精确地描述数据之间的关系.这样当出现新的数据的时候,就能够预测出一个简单的值. 线性回归中最常见的就是房价的问题.一直存在很多房屋面积和房价的数据,如下图所示 ...
- MyBatis Plus 实现多表分页模糊查询
项目中使用springboot+mybatis-plus来实现. 但是之前处理的时候都是一个功能,比如分页查询,条件查询,模糊查询. 这次将这个几个功能合起来就有点头疼,写下这边博客来记录自己碰到的问 ...
- 2 IDEA——新建一个java项目
快捷键 public class Hello { // psvm public static void main(String[] args) { // sout System.out.println ...
- aspnetcore 应用 接入Keycloak快速上手指南
登录及身份认证是现代web应用最基本的功能之一,对于企业内部的系统,多个系统往往希望有一套SSO服务对企业用户的登录及身份认证进行统一的管理,提升用户同时使用多个系统的体验,Keycloak正是为此种 ...
- Python数模笔记-Sklearn(3)主成分分析
主成分分析(Principal Components Analysis,PCA)是一种数据降维技术,通过正交变换将一组相关性高的变量转换为较少的彼此独立.互不相关的变量,从而减少数据的维数. 1.数据 ...