YOLO v4 高级策略与模型优化

在这篇文章中,将探讨并实现YOLO v4中的十种高级策略,帮助构建最佳的自定义数据集对象检测模型。注意,本文假设已经训练过YOLO v4。如果刚开始,可以查看YOLOv4训练指南。这里的高级策略将基于基本的训练流程进行构建。

YOLO v4 高级策略路线图

收集更多数据

图像预处理和增强

图像输入分辨率大小

何时使用预训练权重

选择模型大小和架构

从之前的训练运行中恢复

训练后选择最佳模型

跟踪模型评估

导出模型

优化推理时间

收集更多数据

提高对象检测模型的最佳方式是收集更具代表性的数据,YOLO v4也不例外。正如特斯拉AI高级总监Andrej Karpathy在解释特斯拉如何教汽车停止时所说:“数据集是活的,标注指令一直在变化。需要不断地策划和改变数据集。”

YOLOv4 图像预处理和增强

收集和标注更多数据是昂贵的。幸运的是,有几种方法可以通过增强来改善训练集的范围和大小。首先,可以直接在Roboflow中标注图像——这可以为节省时间——已经开发了标注图像的最佳实践。

YOLO v4训练管道会自动进行增强(参见这篇文章关于YOLO v4中的数据增强),但可能需要考虑在Roboflow中添加额外的增强。

图像预处理也是另一个重要步骤,以确保图像具有正确的图像分辨率大小,并且已经标准化了诸如类别本体、灰度和对比度等要素。最重要的预处理决策是图像输入分辨率。

YOLOv4 输入分辨率大小

输入分辨率决定了将传递给模型学习的像素数量。较大的像素分辨率可以提高准确性,但会牺牲训练和推理时间。较大的像素分辨率可以帮助模型检测到小物体。

YOLO模型的像素分辨率必须是32的倍数。选择的标准分辨率大小是416x416。如果在Roboflow中管理数据集,可以在调整预处理步骤中选择数据集输入分辨率大小。

在Roboflow中调整图像大小。重要的是:为了确保输入分辨率大小流经YOLOv4模型,必须调整模型配置文件。在cfg文件夹中,指定模型配置的地方,改变这里的宽度和高度。

[net] batch=64 subdivisions=8 # Training #width=512 #height=512 width=608 height=608 channels=3 momentum=0.949 decay=0.0005 angle=0 saturation = 1.5 exposure = 1.5 hue=.1

何时使用预训练的YOLOv4权重

要开始在YOLOv4上训练,通常下载预训练的权重,并在训练期间从这个预训练的检查点开始:

!wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137 !./darknet detector train data/obj.data cfg/custom-yolov4-detector.cfg yolov4.conv.137 -dont_show -map

这些权重已经在COCO数据集上进行了预训练,包括人、自行车和汽车等常见物体。通常,从预训练的权重开始是一个好主意,特别是如果认为物体与COCO中的对象相似。

然而,如果任务比COCO(空中、文档等)明显困难,可能需要从头开始训练。

!./darknet detector train data/obj.data cfg/custom-yolov4-detector.cfg -dont_show -map

当然,总是有优势去尝试两者,并从经验上看看什么对模型最有效。

选择模型大小和架构

YOLOv4有两种版本:YOLOv4和YOLOv4-tiny。如果最终目标是推理速度,较小的模型可能更有趣。并且通过改进数据集,可能可以弥补精度的下降。

从YOLOv4切换到YOLOv4-tiny是一个模型配置的问题。可以实验中间配置来构建自定义的YOLO模型。为此,请查看cfg文件夹,并尝试更改网络架构和层。需要考虑的一件事可能是实现自定义锚定框,如果对象形状与COCO数据集大不相同。这是一个非常高级的策略!

[yolo] mask = 0,1,2 anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401 classes=80 num=9 jitter=.3 ignore_thresh = .7 truth_thresh = 1 scale_x_y = 1.2 iou_thresh=0.213 cls_normalizer=1.0 iou_normalizer=0.07 iou_loss=ciou nms_kind=greedynms beta_nms=0.6 max_delta=5

从之前的YOLOv4训练运行中恢复

在Darknet框架中训练YOLOv4模型可能需要一段时间。定期保存模型是很重要的。总是可以通过使用先前训练运行的权重来恢复训练:

!./darknet detector train data/obj.data cfg/custom-yolov4-detector.cfg [YOUR WEIGHTS HERE] -dont_show -map

确保权重是用相同的配置文件训练的,并在相同版本的Darknet框架下训练!就像预训练的权重一样,可以从先前的训练运行中恢复,并应用模型从其他数据集到新数据集的学习。

训练后选择最佳YOLOv4模型

Darknet模型权重保存在backup文件夹中,并自动保存每1000次迭代。Darknet将自动为保存最佳模型,扩展名为_best.weights。这基于验证集上的表现。

Darknet还会保存训练运行的最后权重,扩展名为_last.weights。

跟踪YOLOv4模型评估

当在数据集和YOLOv4建模中进行各种调整时,跟踪结果可能很有用,这样就可以看到哪种技术的组合对数据集最有效。

Darknet会输出一个平均精度均值分数,这是决定哪个模型在数据上工作得最好的主要指标。另一个需要考虑的重要指标是推理速度。

导出YOLOv4模型

一旦有了训练好的模型,它将处于Darknet的.weights格式。可能会想将其转换为新格式以进行部署。

YOLOv4 Darknet模型转换指南:

YOLOv4 TFLite用于移动部署

YOLOv4 OpenVino和OAK部署

YOLOv4 Tensorflow Repo

优化YOLOv4推理时间

加快模型推理时间的主要方式是使用较小的模型,如YOLOv4-tiny。通过硬件选择,如GPU或使用Intel VPU上的OpenVino进行推理,还可以进一步提高推理时间。对于GPU推理,建议使用YOLOv4 TensorRT框架进行部署。

恭喜!现在有十种新的高级策略,可以充分利用YOLO v4为自定义数据集创建对象检测器。

想查看最新的PyTorch中的YOLOv4吗?查看Scaled-YOLOv4。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485