乐趣区

关于人工智能:如何在自定义数据集上训练YOLOv5

作者 |Jacob Solawetz, Joseph Nelson
编译 |Flin
起源 |blog

YOLO 系列的指标检测模型随着 YOLOv5 的引入变得越来越弱小。在这篇文章中,咱们将介绍如何训练 YOLOv5 为你的定制用例辨认定制对象。

非常感谢 Ultralytics 将此存储库组合在一起。咱们置信,与洁净的数据管理工具相结合,任何心愿在其我的项目中部署计算机视觉我的项目的开发人员都能够轻松地应用此技术。

咱们应用公共血细胞检测数据集,你能够本人导出。你也能够在本人的自定义数据上应用本教程。

  • 公共血细胞检测数据集:https://public.roboflow.ai/ob…

为了训练探测器,咱们采取以下步骤:

  • 装置 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…

装置 YOLOv5 环境

从 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/datasets

print('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/ob…

对于标记工具的疾速阐明

如果你有未标记的图像,则首先须要标记它们。对于收费的开源标签工具,咱们举荐 LabelImg 入门CVAT 正文工具入门 的指南。尝试标记约 50 幅图像再持续本教程。要在当前进步模型的性能,你将须要增加更多标签。

  • https://blog.roboflow.ai/gett…
  • https://blog.roboflow.ai/gett…

一旦你标记了数据,要将数据挪动到 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.50

anchors:
  - [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:确定批次大小
  • epochs:定义训练时间段的数量。(注:通常,3000+ 很常见!)
  • data:设置 yaml 文件的门路
  • cfg:指定咱们的模型配置
  • weights:指定权重的自定义门路。(留神:你能够从 Ultralytics Google Drive 文件夹下载权重)
  • name:后果名称
  • nosave:只保留最初的检查点
  • cache:缓存图像以放慢训练速度

运行训练命令:


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

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

  • https://blog.roboflow.ai/what…

评估定制 YOLOv5 探测器性能

当初咱们曾经实现了训练,咱们能够通过查看验证指标来评估训练过程的执行状况。训练脚本将删除 tensorboard 日志。咱们将其可视化:

在咱们的自定义数据集上可视化 tensorboard 后果

如果你因为一些起因不能把张量板可视化,后果也能够用 utils.plot_result 来绘制并保留为 result.png。

我早早就进行了训练。你须要在验证映射达到其最高点处获取经过训练的模型权重。

可视化 YOLOv5 训练数据

在训练过程中,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 十分不便。YOLOv5 训练迅速,推理迅速,表现出色。
让咱们把它弄出来!

原文链接:https://blog.roboflow.ai/how-…

欢送关注磐创 AI 博客站:
http://panchuang.net/

sklearn 机器学习中文官网文档:
http://sklearn123.com/

欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/

退出移动版