点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

YOLO系列的目标检测模型随着YOLOv5的引入变得越来越强大了。在这篇文章中,我们将介绍如何训练YOLOv5为你识别自己定制的对象。

本文我们使用公共血细胞检测数据集,你可以自己导出,也可以在自己自定义数据上使用本教程。

  • 公共血细胞检测数据集:https://public.roboflow.ai/object-detection/bccd

为了训练检测器,我们采取以下步骤:

  • 安装YOLOv5依赖项

  • 下载自定义YOLOv5对象检测数据

  • 定义YOLOv5模型配置和架构

  • 训练一个定制的YOLOv5检测器

  • 评估YOLOv5性能

  • 可视化YOLOv5训练数据

  • 对测试图像使用YOLOv5进行推断

  • 导出并保存YOLOv5权重以供将来使用

YOLOv5的新技术点

就在两个月前,我们对googlebrain引入EfficientDet感到非常兴奋,并写了一些关于EfficientDet的博客文章。我们认为这个模型可能会超越YOLO家族在实时目标探测领域的突出地位,但事实证明我们错了。

三周内,YOLOv4在Darknet框架下发布,我们还写了很多关于YOLOv4技术解析的文章。

在写这些文章的几个小时之前,YOLOv5发布了,我们发现它非常清晰明了。

YOLOv5是在Ultralytics-Pythorch框架中编写的,使用起来非常直观,推理速度非常快。事实上,我们和许多人经常将YOLOv3和YOLOv4 Darknet权重转换为Ultralytics PyTorch权重,以便使用更轻的库来更快地进行推理。

YOLOv5比YOLOv4表现更好吗?我们很快会向你介绍,在此之前你需要已经对YOLOv5和YOLOv4有了初步的了解。

YOLOv5与EfficientDet的性能对比

YOLOv4显然没有在YOLOv5存储库中进行评估,也就是说,YOLOv5更易于使用,而且它在我们最初运行的定制数据上表现非常出色。

我们建议你在 YOLOv5 Colab Notebook 中同时进行接下来的操作。

  • https://colab.research.google.com/drive/1gDZ2xcTOgR39tGGs-EZ6i3RTs16wmzZQ

安装YOLOv5环境

首先我们克隆YOLOv5存储库并安装依赖项,这会设置我们的编程环境,准备好运行对象检测训练和推理命令。

!git clone https://github.com/ultralytics/yolov5  # clone repo
!pip install -U -r yolov5/requirements.txt  # install dependencies%cd /content/yolov5

然后,我们可以看看谷歌Colab免费提供给我们的训练环境。

import torch
from IPython.display import Image  # for displaying images
from utils.google_utils import gdrive_download  # for downloading models/datasetsprint('torch %s %s' % (torch.__version__, torch.cuda.get_device_properties(0) if torch.cuda.is_available() else 'CPU'))

你会从谷歌Colab收到一个 Tesla P100 GPU。以下是我收到的:

torch 1.5.0+cu101 _CudaDeviceProperties(name='Tesla P100-PCIE-16GB', major=6, minor=0, total_memory=16280MB, multi_processor_count=56)

GPU可以让我们加快训练时间,Colab预装了torchcuda。如果你尝试在本地使用本教程,可能需要执行其他步骤来设置YOLOv5。

下载自定义YOLOv5对象检测数据

在本教程中,我们将从Roboflow下载YOLOv5格式的自定义对象检测数据。在本教程中,我们使用公共血细胞检测数据集训练YOLOv5检测血流中的细胞,你可以使用公共血细胞数据集或上传你自己的数据集。

  • Roboflow:https://roboflow.ai/

  • 公共血细胞数据集:https://public.roboflow.ai/object-detection/bccd

关于标记工具的说明

如果你有未标记的图像,则首先需要标记它们。对于免费的开源标签工具,我们推荐你阅读 LabelImg入门CVAT注释工具入门 的教程指南。尝试标记约50幅图像再继续本教程,因为在以后提高模型的性能的过程中,你将需要添加更多标签。

  • https://blog.roboflow.ai/getting-started-with-labelimg-for-labeling-object-detection-data/

  • https://blog.roboflow.ai/getting-started-with-cvat/

一旦你标记了数据,要将数据移动到Roboflow中,请创建一个免费帐户,然后你可以以任何格式拖动数据集:(VOC XML、COCO JSON、TensorFlow对象检测CSV等)。

上传后,你可以选择预处理和增强步骤:

为BCCD示例数据集选择设置

然后,单击 Generate 和 Download,你将可以选择YOLOv5 Pythorch格式了。

选择“YOLO v5 Pythorch”

当出现提示时,一定要选择“Show Code Snippet”,这将输出一个下载curl脚本,这样你就可以轻松地将数据以正确的格式移植到Colab中。

curl -L "https://public.roboflow.ai/ds/YOUR-LINK-HERE" > roboflow.zip; unzip roboflow.zip; rm roboflow.zip

正在Colab中下载…

下载YOLOv5格式的自定义对象数据集

导出将会创建一个名为data.yaml的YOLOv5.yaml文件,指定YOLOv5 images文件夹、YOLOv5 labels文件夹的位置以及自定义类的信息。

定义YOLOv5模型配置和架构

接下来,我们为我们的定制对象检测器编写一个模型配置文件。在本教程中,我们选择了最小、最快的YOLOv5基本模型,你也可以从其他YOLOv5模型中选择,包括:

  • YOLOv5s

  • YOLOv5m

  • YOLOv5l

  • YOLOv5x

你也可以在此步骤中编辑网络结构,但一般不需要这样做。以下是YOLOv5模型配置文件,我们将其命名为custom_yolov5s.yaml

nc: 3
depth_multiple: 0.33
width_multiple: 0.50anchors:- [10,13, 16,30, 33,23] - [30,61, 62,45, 59,119]- [116,90, 156,198, 373,326]backbone:[[-1, 1, Focus, [64, 3]],[-1, 1, Conv, [128, 3, 2]],[-1, 3, Bottleneck, [128]],[-1, 1, Conv, [256, 3, 2]],[-1, 9, BottleneckCSP, [256]],[-1, 1, Conv, [512, 3, 2]], [-1, 9, BottleneckCSP, [512]],[-1, 1, Conv, [1024, 3, 2]],[-1, 1, SPP, [1024, [5, 9, 13]]],[-1, 6, BottleneckCSP, [1024]],]head:[[-1, 3, BottleneckCSP, [1024, False]],[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]],[-2, 1, nn.Upsample, [None, 2, "nearest"]],[[-1, 6], 1, Concat, [1]],[-1, 1, Conv, [512, 1, 1]],[-1, 3, BottleneckCSP, [512, False]],[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]],[-2, 1, nn.Upsample, [None, 2, "nearest"]],[[-1, 4], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]],[-1, 3, BottleneckCSP, [256, False]],[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]],[[], 1, Detect, [nc, anchors]],]

训练定制YOLOv5探测器

我们的data.yamlcustom_yolov5s.yaml文件已经准备好了,我们库开始训练了!

为了开始训练,我们使用以下选项运行训练命令:

  • img:定义输入图像大小

  • batch:确定batch大小

  • epochs:定义epochs。(注:通常,3000+很常见!)

  • data:设置yaml文件的路径

  • cfg:指定我们的模型配置

  • weights:指定权重的自定义路径。(注意:你可以从Ultralytics Google Drive文件夹下载权重)

  • name:结果名称

  • nosave:只保存最后的检查点

  • cache:缓存图像以加快训练速度

运行训练命令:

训练定制的YOLOv5探测器。它训练得很快!

在训练期间,你可以看 mAP@0.5 来了解你的探测器是如何运行的,请参阅这篇文章。

  • https://blog.roboflow.ai/what-is-mean-average-precision-object-detection/

评估定制YOLOv5检测器的性能

现在我们已经完成了训练,我们可以通过查看验证指标来评估训练过程的执行情况。训练脚本将删除tensorboard日志,我们将其可视化:

在我们的自定义数据集上可视化tensorboard结果

如果你因为一些原因不能把张量可视化,可以用utils.plot_result来绘制并保存为result.png。

你需要在验证评估分数达到其最高点处获取训练好的模型权重。

可视化YOLOv5训练数据

在训练过程中,我们可以可视化真实训练数据和增强后的训练数据。

我们的真实训练数据

我们的训练数据采用自动YOLOv5增强

对象测试图像运行YOLOv5推断

现在我们利用我们训练好的模型,对测试图像进行推理。训练完成后,模型权重将保存到 weights/。

推理过程,我们调用这些权重和一个指定模型置信度的conf(要求的置信度越高,预测越少)、以及一个推理源。源可以接受一个包含图像、单个图像、视频文件以及设备的网络摄像头端口的目录。对于源代码,我将test/*jpg移到test-infer/

!python detect.py --weights weights/last_yolov5s_custom.pt --img 416 --conf 0.4 --source ../test_infer

推理时间非常快,在我们的 Tesla P100 上,YOLOv5s 达到了每秒142帧!!

以142 FPS(0.007s/图像)的速度推断YOLOv5s

最后,我们在测试图像上可视化我们的检测器推断结果。

测试图像的YOLOv5推理

导出并保存YOLOv5权重以将来推断

既然我们定制的YOLOv5物体检测器已经通过验证,我们需要从Colab中取出权重,用于实时计算机视觉任务,为此我们导入一个Google驱动器模块并将其发送出去。

from google.colab import drive
drive.mount('/content/gdrive')%cp /content/yolov5/weights/last_yolov5s_custom.pt /content/gdrive/My\ Drive

结论

我们希望你可以训练属于你自己的定制YOLOv5检测器!

使用 YOLOv5 非常方便,而且训练迅速,推理迅速,表现出色。让我们把它弄出来!

参考链接:https://blog.roboflow.ai/how-to-train-yolov5-on-a-custom-dataset/

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

在自定义的数据集上训练YOLOv5详细教程分享相关推荐

  1. 如何在自定义的数据集上训练YOLOv5

    YOLO系列的目标检测模型随着YOLOv5的引入变得越来越强大了.在这篇文章中,我们将介绍如何训练YOLOv5为你识别自己定制的对象. 本文我们使用公共血细胞检测数据集,你可以自己导出,也可以在自己自 ...

  2. 计算机怎么放映文档,当贝投影怎么局域网共享看电脑上的电影详细教程分享

    当贝投影怎么局域网共享看电脑上的电影详细教程分享 2019年07月08日 14:50作者:黄页编辑:黄页 分享 当贝投影怎么局域网共享看电脑上的电影?这话什么意思?指的是电脑通过局域网共享电影文件,然 ...

  3. internetreadfile读取数据长度为0_YOLOV3的TensorFlow2.0实现,支持在自己的数据集上训练...

    GitHub链接: calmisential/YOLOv3_TensorFlow2​github.com 我主要参考了yolov3的一个keras实现版本: qqwweee/keras-yolo3​g ...

  4. 在MNIST数据集上训练一个手写数字识别模型

    使用Pytorch在MNIST数据集上训练一个手写数字识别模型, 代码和参数文件 可下载 1.1 数据下载 import torchvision as tvtraining_sets = tv.dat ...

  5. 在自己的数据集上训练CrowdDet过程记录

    论文链接:https://readpaper.com/pdf-annotate/note?noteId=656650387498369024&pdfId=542662939605901312 ...

  6. 构建Transformer模型 | 在wikiText-2数据集上训练一个语言模型

    0 Introduction 自然语言处理通用解决方案 需要熟悉word2Vec, 了解词向量如何建模 重点在于Transformer网络架构,BERT训练方法,实际应用 开源项目,都是现成的,套用进 ...

  7. DL之DCGNN:基于TF利用DCGAN实现在MNIST数据集上训练生成新样本

    DL之DCGNN:基于TF利用DCGAN实现在MNIST数据集上训练生成新样本 目录 输出结果 设计思路 实现部分代码 说明:所有图片文件丢失 输出结果 更新-- 设计思路 更新-- 实现部分代码 更 ...

  8. domain gap(域间隙)是什么?==>在一个数据集上训练好的模型无法应用在另一个数据集上

    不同数据集之间存在domain gap,在一个数据集上训练模型,在另外一个数据集上进行预测性能下降很大 re-id(视频行人重识别问题) 现有公开的数据集与真实场景存在很大不同,不同re-id的数据集 ...

  9. pascal行人voc_在Pascal VOC 数据集上训练YOLOv3模型

    上节介绍了<从零开始在Windows10中编译安装YOLOv3>,本节介绍在Pascal VOC 数据集上训练YOLOv3. 第一步,下载并安装YOLOv3训练依赖项. a.下载Pasca ...

最新文章

  1. 一场“交通进化”将至: 5G带给车联网与自动驾驶哪些升级?
  2. 转载:为什么使用ibatis而不用spring jdbcTemplate
  3. OCCI读写Oracle Spatial的SDO_Geometry
  4. 渐统江湖的项目原型生成工具 -- Maven Archetype
  5. 洛谷 P3320: bzoj 3991: LOJ 2182: [SDOI2015]寻宝游戏
  6. java制作安卓客户端,java做服务器,android干客户端,实现数据传输
  7. mysql和python先学哪个_Python数据库操作 初识mysql和mysql基本操作#学习猿地
  8. 用C读取INI配置文件 (可在linux平台上用)
  9. sql文件转成json格式_10秒就能将任意格式的文件转成PDF,简单易操作,不学可别后悔...
  10. Android - 返回上一个界面finish()方法
  11. Spark 读写 Es
  12. 关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析
  13. FabFilter Pro-R 混响效果器
  14. 本地KMS虚拟服务器,搭建kms本地服务器
  15. java实现NC数据等值线等值面可视化
  16. 英菲克无线鼠标pm6的配对方法
  17. 犹太裔大陆籍华人的故事-值得一读
  18. IllegalArgumentException: wrong number of arguments
  19. 银行ATM登录管理系统(最简版)
  20. html中文本重复,在网页中去除文本列表中重复行与计算重复次数的代码原理

热门文章

  1. 谈谈Python那些不为人知的冷知识(一)
  2. Spring越来越强,而我们越来越快餐!离开了Spring,居然API都写不出来了! 程序猿DD...
  3. 这是我见过最通俗易懂的 装饰者模式 讲解了!
  4. MyBatis 框架下 SQL 注入攻击的 3 种方式,真是防不胜防!
  5. 目标检测模型从训练到部署!
  6. Tianchi发布最新AI知识树!
  7. Python的深浅拷贝讲解!
  8. 深入浅出神经网络的改进方法!
  9. 天大本科生论文入选CVPR 2022,实现深度学习长尾分类新SOTA
  10. PyTorch下的可视化工具(网络结构/训练过程可视化)