使用 Keras 进行 YOLOv3 目标检测

2025 年 6 月 20 日 | 阅读 9 分钟

对象检测是计算机视觉中的核心任务,它识别和定位图像中的对象。在众多技术中,YOLO(You Only Look Once)因其速度和准确性而广受欢迎。YOLOv3 是 YOLO 系列的第三次迭代,在性能和精度方面都有显著改进,使其成为实时对象检测的首选。

理解 YOLOv3

YOLOv3 将图像划分为网格,同时尝试预测边界框、类别概率和对象置信度分数。与大多数用于对象检测算法的滑动窗口技术等传统方法不同,YOLO 将该过程视为一个回归问题,从而显著加快了过程。YOLOv3 引入了对早期版本的两项改进,即通过特征金字塔网络进行多尺度特征检测和骨干网络架构 Darknet-53,这两项改进都提高了其准确性并使网络能够有效地检测较小的对象。

该模型输出三种不同尺度的预测,从而允许模型有效地检测不同大小的对象。它使用锚框来预测边界框,并应用非极大值抑制来移除冗余预测。

Keras 中设置 YOLOv3

使用 Keras 设置 YOLOv3

在 Keras 上实现 YOLOv3 需要许多步骤,例如加载预训练模型并通过运行推理处理输入数据。首先,获取 YOLOv3 的权重和配置文件,这些文件通常由原始 Darknet 实现分发。

现在是数据集的路径。

代码

我们现在在 Keras 中实现 YOLOv3 模型,从 Darknet.weights 文件加载预训练权重,将架构定义为具有批量归一化、Leaky ReLU 激活函数和残差连接的模块化卷积块,然后使用名为 ReaderWeight 的类读取和处理 Darknet 权重,将其重塑为适合加载到模型中的格式。加载后,模型可以保存为 H5 格式,并用于对象检测任务。

代码

可视化函数

我们将有一个用于边界框的 BoundBox 类,并通过多个 decode_netout 和 yolo_boxes_correct 处理模型输出,通过 nms_do 移除冗余框,加载图像像素,并通过置信度阈值获取过滤对象的框。最后,boxes_draw 函数通过绘制边界框和在图像上方显示标签来显示结果。

代码

模型

现在我们将制作我们的模型。

代码

Object Detection with YOLOv3 using Keras
Object Detection with YOLOv3 using Keras

加载模型

我们将权重导入模型,因为它们现在已保存在 h5 文件中(位于输出文件中)。

代码

输出

Object Detection with YOLOv3 using Keras
Object Detection with YOLOv3 using Keras

检测中

我们现在尝试猜测前三张训练集照片中的对象,以查看我们的解决方案是否有效。

代码

输出

Object Detection with YOLOv3 using Keras
Object Detection with YOLOv3 using Keras
Object Detection with YOLOv3 using Keras
下一主题CNB 算法