跳至内容

YOLO 目标检测详解

了解 YOLO 目标检测、其优势、这些年的演进,以及部分真实应用。
已更新 2026年10月6日  · 15分钟 阅读

使用 AI 探索

ChatGPTClaudePerplexity

目标检测是一种计算机视觉技术,用于在图像或视频中识别并定位物体。

要点速览

  • YOLO(You Only Look Once)是一种实时目标检测算法,采用单次前向传播处理整张图像,较两阶段检测器显著更快
  • 算法将图像划分为网格,预测带置信度的边界框,并使用非极大值抑制(NMS)过滤重叠检测
  • YOLO 从 v1(2015)发展到 YOLOv10、YOLOv11、YOLOv12 以及 YOLO26(2026),每个版本在速度、精度或两者上均有提升
  • 常见应用包括自动驾驶、医疗成像、农业、安全监控和体育分析
  • 使用 pip install ultralytics 安装,可通过 Python API 或 CLI 进行推理

图像定位是指使用边界框(即包围物体的矩形)来确定一个或多个物体在图像中的准确位置。该过程有时会与图像分类或图像识别混淆,后者旨在将整张图像或图像中的某个物体归入某个类别。

下图对应于上述说明的可视化表示。图像中检测到的物体为“Person”。

Object detection illustrated from image recognition and localization

图片来源:作者

在这篇概念性博文中,您将先了解目标检测的优势,然后介绍当前最前沿的目标检测算法 YOLO。

第二部分我们将更加聚焦 YOLO 算法及其工作原理。随后,我们会给出一些基于 YOLO 的真实应用。

最后一节将说明 YOLO 从 2015 年到 2024 年的演进,并给出后续步骤。

什么是 YOLO?

You Only Look Once(YOLO)是一种最前沿的实时目标检测算法,由 Joseph Redmon、Santosh Divvala、Ross Girshick 和 Ali Farhadi 于 2015 年在著名论文 You Only Look Once: Unified, Real-Time Object Detection 中提出。

作者将目标检测问题表述为回归任务而非分类任务:通过空间上分离边界框,并使用单个卷积神经网络(CNN)为每个检测分配概率。

如果您对图像分类感兴趣,可以学习 Image Modeling with Keras in Python 课程,使用 Keras 构建用于图像分类的深度神经网络。若更偏好 PyTorch,Deep Learning with PyTorch 将教授卷积神经网络及其用于构建更强大模型的方法。

YOLO 为何在目标检测中广受欢迎?

YOLO 领先的原因包括:

  • 速度
  • 检测精度
  • 良好的泛化能力
  • 开源

我们来更详细地看看这些特性。

1. 速度

YOLO 极其迅速,因为它不依赖复杂的流水线。它可达每秒 45 帧(FPS)。此外,相比其他实时系统,YOLO 的 mAP 超过两倍,使其成为实时处理的极佳选择。

从下图可见,YOLO 以 91 FPS 明显领先其他目标检测器。

YOLO Speed compared to other state-of-the-art object detectors

YOLO 与其他最前沿目标检测器的速度对比(来源)

2. 高检测精度

在精度上,YOLO 也优于其他最前沿模型,背景误检极少。

3. 更好的泛化

这对新版本的 YOLO 尤为明显,本文稍后将讨论。随着这些进步,YOLO 在新领域上的泛化更好,适用于依赖快速且鲁棒目标检测的应用。

例如,Automatic Detection of Melanoma with Yolo Deep Convolutional Neural Networks 指出,首个版本 YOLOv1 在黑色素瘤自动检测的 mAP 低于 YOLOv2 和 YOLOv3。

4. 开源

将 YOLO 开源促使社区不断改进模型。这也是 YOLO 能在短时间内取得大量进步的原因之一。

YOLO 架构

YOLO 的架构类似于 GoogleNet。如下图所示,它包含 24 个卷积层、4 个最大池化层和 2 个全连接层。

YOLO Architecture from the original paper

YOLO 架构(摘自原始论文,作者改绘)

其工作流程如下:

  • 将输入图像调整为 448x448 后送入卷积网络。
  • 先应用 1x1 卷积以减少通道数,再用 3x3 卷积生成立方体输出。
  • 除最后一层使用线性激活外,其余层的激活函数为 ReLU。
  • 批归一化与 dropout 等技术用于正则化并防止过拟合。

完成 Deep Learning in Python 学习路径或 PyTorch CNN 教程 后,您即可使用 Keras 训练与测试复杂的多输出网络,进一步深入深度学习。

YOLO 目标检测如何工作?

既然已经理解了架构,我们用一个简明用例从高层看看 YOLO 如何执行目标检测。

“想象您开发了一个 YOLO 应用,可以在给定图像中检测球员和足球。

但如何向他人,尤其是非专业人士解释这个过程?

→ 本节旨在帮助您理解 YOLO 执行目标检测的完整流程,以及如何从图像(A)得到图像(B)。”

YOLO Object Detection Image by Jeffrey F Lin on Unsplash图片来源:作者

该算法基于以下四个步骤:

  • 残差块
  • 边界框回归
  • 交并比(IOU)
  • 非极大值抑制(NMS)

我们逐一深入了解。

1. 残差块

第一步将原始图像(A)划分为形状相同的 NxN 网格,我们示例中 N=4(见右图)。每个网格单元负责定位并预测其覆盖物体的类别以及概率/置信度。

Application of grid cells to the original image

图片来源:作者

2. 边界框回归

下一步是确定对应于矩形的边界框,突出图像中的所有物体。图像中有多少物体,就可能有多少边界框。

YOLO 使用单个回归模块确定这些边界框的属性,格式如下,其中 Y 是每个边界框的最终向量表示。

Y = [pc, bx, by, bh, bw, c1, c2]

这在模型训练阶段尤为重要。

  • pc 表示该网格包含物体的概率分数。例如,所有红色网格的概率分数将大于 0。右图为简化版本,因为每个黄色单元的概率为 0(可忽略)。

Identification of significant and insignificant grids

图片来源:作者

  • bx、by 是边界框中心相对于其所在网格单元的 x、y 坐标。
  • bh、bw 分别为边界框的高度与宽度,相对于其所在网格单元。
  • c1 和 c2 对应两个类别:球员与足球。根据用例可扩展为任意多的类别。

为便于理解,我们重点关注右下角的那位球员。

Bounding box regression identification图片来源:作者

3. 交并比(IOU)

多数情况下,图像中的单个物体会有多个候选网格用于预测,但并非都相关。IOU(0 到 1 之间的值)的目标是丢弃无关候选,仅保留相关者。其逻辑如下:

  • 用户设定 IOU 选择阈值,例如 0.5。
  • 随后,YOLO 计算每个网格框的 IOU,即交集面积除以并集面积。
  • 最后,忽略 IOU ≤ 阈值的预测,保留 IOU > 阈值者。

下图展示了对左下角物体应用网格选择的过程。可见该物体最初有两个候选网格,最终只保留了“Grid 2”。

Process of selecting the best grids for prediction

图片来源:作者

4. 非极大值抑制(NMS)

仅设置 IOU 阈值并不总是足够,因为同一物体可能存在多个 IOU 超过阈值的框,全部保留会引入噪声。此时使用 NMS 仅保留置信度最高的边界框。

YOLO 的应用

YOLO 目标检测在我们的日常生活中有着广泛应用。本节将涵盖医疗、农业、安全监控和自动驾驶等领域。

目标检测已在医疗和农业等众多行业落地。我们通过具体示例来了解。

医疗

尤其在外科手术中,由于患者间的生物差异,实时定位器官具有挑战性。Kidney Recognition in CT 使用 YOLOv3,以便在 CT 扫描中实现二维与三维肾脏定位。

Biomedical Image Analysis in Python 课程可帮助您学习用 Python 探索、处理与测量生物医学图像数据的基础知识。

2D Kidney detection by YOLOv3

YOLOv3 的二维肾脏检测(图片来自 Kidney Recognition in CT using YOLOv3)

农业

人工智能与机器人在现代农业中发挥重要作用。采摘机器人是基于视觉的机器人,用以替代人工采摘果蔬。该领域的一些最佳模型采用 YOLO。在 基于改进 YOLOv3 框架的番茄检测中,作者阐述了如何使用 YOLO 识别果蔬类型以提升采收效率。

Comparison of YOLO-tomato models

图片来源:基于改进 YOLOv3 框架的番茄检测(来源)

安全监控

尽管目标检测多用于安全监控,但绝非唯一场景。新冠疫情期间,YOLOv3 被用于估计人与人之间的社交距离违规情况。

可参考 A deep-learning-based social distance monitoring framework for COVID-19 获取更多信息。

自动驾驶

实时目标检测是自动驾驶系统的“DNA”之一。车辆需要正确识别车道及周围所有物体与行人,以提升道路安全。YOLO 的实时性使其较简单的图像分割方法更具优势。

YOLO 的演进:2015 至 2024

自 2015 年首次发布以来,YOLO 经历了多个版本的巨大演进。本节将介绍这些版本间的差异。

YOLO 或 YOLOv1:起点

YOLO 的首个版本是目标检测领域的变革者,因为它能快速高效地识别物体。

然而,与许多解决方案类似,YOLO 的第一版也有其局限:

  • 难以在群体图像中检测较小目标,例如体育场中的人群。这是因为 YOLO 架构中每个网格仅设计用于单目标检测。
  • 难以成功检测新的或不寻常的形状。
  • 用于评估检测性能的损失函数对大小边界框的误差一视同仁,反而导致定位不准。

YOLOv2 或 YOLO9000

YOLOv2 于 2016 年推出,旨在让 YOLO 模型更好、更快、更强。

改进包括但不限于采用 Darknet-19 新架构、批归一化、更高输入分辨率、带锚框的卷积层、维度聚类以及(5)细粒度特征等。

批归一化

新增批归一化层使 mAP 提升 2%,并具有正则化效果,防止过拟合。

更高的输入分辨率

YOLOv2 直接使用更高的 448×448 输入而非 224×224,使模型调整其滤波器以更好适配高分辨率图像。该方法在 ImageNet 数据上训练 10 个 epoch 后,精度提升 4% mAP。

使用锚框的卷积层

YOLOv2 不再像 YOLOv1 那样直接预测边界框精确坐标,而是用锚框替换全连接层,简化问题。此举略微降低精度,但将召回率提升 7%,为进一步改进留出空间。

维度聚类

YOLOv2 使用 k=5 的 k-means 维度聚类自动寻找锚框,替代人工选择。这一新方法在召回与精度之间取得良好权衡。

若想更好理解 k-means 维度聚类,请参阅我们的 K-Means Clustering in Python with scikit-learn 与 K-Means Clustering in R 教程,它们分别以 Python 与 R 讲解 k-means 聚类。

细粒度特征

YOLOv2 的预测生成 13x13 特征图,这对大型目标足够。但对于更细小目标,可将 26 × 26 × 512 的特征图变换为 13 × 13 × 2048,并与原始特征拼接。该方法使性能提升 1%。

YOLOv3:增量式改进

在 YOLOv2 基础上进行了增量改进,形成 YOLOv3。

主要变化是新的网络架构:Darknet-53。这是一个包含上采样网络与残差块的 106 层神经网络,相比作为 YOLOv2 主干的 Darknet-19 更大、更快、更准。新架构带来多方面收益:

更好的边界框预测

YOLOv3 使用逻辑回归模型为每个边界框预测目标性分数。

更准确的类别预测

YOLOv3 不再使用 YOLOv2 的 softmax,而引入独立的逻辑分类器来准确预测边界框的类别。这在存在重叠标签(如 Person → Soccer Player)的复杂领域尤为有用。使用 softmax 会强制每个框只有一个类别,而事实并非总是如此。

多尺度更精准的预测

YOLOv3 在输入图像的每个位置进行三种不同尺度的预测,以帮助前层的上采样。这一策略能获得更细粒度且语义更丰富的信息,输出质量更佳。

YOLOv4:目标检测的最优速度与精度

与前代和其他最前沿检测器相比,该版本在速度与精度上更优。

下图显示 YOLOv4 在速度上分别超过 YOLOv3 与 FPS 10% 和 12%。

YOLOv4 Speed compared to YOLOv3

YOLOv4 与 YOLOv3 及其他最前沿检测器的速度对比(来源)

YOLOv4 专为生产系统设计,并针对并行计算进行了优化。

YOLOv4 的主干为 CSPDarknet53,该网络包含 29 个 3 × 3 卷积层,约 2760 万参数。

与 YOLOv3 相比,该架构为更好的目标检测新增了以下内容:

  • SPP(空间金字塔池化)模块显著增加感受野,分离出最相关的上下文特征,同时不影响网络速度。
  • YOLOv4 使用 PANet 进行不同检测层间的参数聚合,取代 YOLOv3 的 FPN。
  • 数据增强采用 Mosaic 技术(组合四张训练图像),并加入自对抗训练。
  • 使用遗传算法进行最优超参数选择。

YOLOR:You Only Look One Representation

作为多任务的统一网络,YOLOR 基于结合显性与隐性知识的方法构建统一网络。

YOLOR unified network architecture

统一网络架构(来源)

显性知识是正常或有意识的学习;而隐性学习则是潜意识中(基于经验)进行。

结合这两种技术,YOLOR 通过三个过程构建更鲁棒的架构:(1)特征对齐,(2)用于目标检测的预测对齐,(3)多任务学习的规范表示。

预测对齐

该方法向每个特征金字塔网络(FPN)的特征图中引入隐式表示,使精度提升约 0.5%。

用于目标检测的预测精炼

通过在网络输出层加入隐式表示来精炼模型预测。

多任务学习的规范表示

进行多任务训练需要对跨任务共享的损失函数执行联合优化,此过程可能降低整体性能;在训练中引入规范表示可缓解该问题。

从下图可见,YOLOR 在 MS COCO 数据集上的推理速度达到最前沿水平,优于其他模型。

YOLOR vs YOLOv4

YOLOR 与 YOLOv4 及其他模型的性能对比(来源)

YOLOX:2021 年超越 YOLO 系列

其基线为经改造的 YOLOv3,以 Darknet-53 为主干。

在论文 Exceeding YOLO Series in 2021 中发表,YOLOX 带来以下四个关键特性,使其较旧版本构建更优模型。

高效的解耦头

早期 YOLO 使用的耦合头被证明会降低性能。YOLOX 使用解耦头,将分类与定位任务分开,从而提升性能。

鲁棒的数据增强

在数据增强中集成 Mosaic 与 MixUp,显著提升了 YOLOX 的表现。

无锚机制

基于锚的算法在底层执行聚类,增加推理时间。YOLOX 移除锚机制,减少每张图像的预测数量,显著提升推理速度。

用于标签分配的 SimOTA

作者引入更鲁棒的标签分配策略 SimOTA,替代 IOU 方式,在减少训练时间、避免额外超参数问题的同时达到最前沿效果,并将检测 mAP 提升 3%。

YOLOv5

与其他版本不同,YOLOv5 没有发表研究论文,是首个使用 Pytorch(而非 Darknet)实现的 YOLO 版本。

由 Glenn Jocher 于 2020 年 6 月发布,YOLOv5 与 YOLOv4 类似,采用 CSPDarknet53 作为主干。发布包含五种模型尺寸:YOLOv5s(最小)、YOLOv5m、YOLOv5l 与 YOLOv5x(最大)。

YOLOv5 的一大改进是引入 Focus 层(单层表示),以替换 YOLOv3 的前 3 层,从而减少层数与参数量,同时提升前向与反向速度,对 mAP 几乎无影响。

下图比较了 YOLOv4 与 YOLOv5s 的训练时间。

YOLOv4 vs YOLOv5 Training Time

YOLOv4 与 YOLOv5 的训练时间对比(来源)

YOLOv6:面向工业应用的单阶段目标检测框架

YOLOv6(MT-YOLOv6)面向工业应用,具备硬件友好的高效设计与高性能,由中国电商公司 美团发布。

该版本基于 Pytorch 编写,不属于官方 YOLO,但因其主干受原始单阶段 YOLO 启发而被称为 YOLOv6。

YOLOv6 相比 YOLOv5 引入三项重要改进:硬件友好的主干与颈部设计、高效的解耦头、更有效的训练策略。

在 COCO 数据集上,YOLOv6 在精度与速度方面均优于前代 YOLO,如下图所示。

YOLO Model Comparison

最前沿高效检测器对比。除量化模型使用 TensorRT 8 外,均在 TensorRT 7 下测试(来源)

  • YOLOv6-N 在 COCO 数据集上实现 35.9% AP,且在 NVIDIA Tesla T4 GPU 上吞吐达 1234 FPS。
  • YOLOv6-S 以 869 FPS 达到新的最前沿 43.3% AP。
  • YOLOv6-M 与 YOLOv6-L 也分别实现 49.5% 与 52.3% 的更高精度,同时保持相同推理速度。

这些特性使 YOLOv6 成为工业应用的理想算法。

YOLOv7:可训练的“免费礼包”与实时检测新标杆

YOLOv7 于 2022 年 7 月发表在论文 Trained bag-of-freebies sets new state-of-the-art for real-time object detectors。该版本在目标检测领域迈出重要一步,在精度与速度上超越前代模型。

YOLOV7 VS Competitors

YOLOv7 与其他实时检测器的推理时间对比(来源)

YOLOv7 在(1)架构与(2)可训练“免费礼包”层面做出重大改变:

架构层面

YOLOv7 融合扩展高效层聚合网络(E-ELAN),使模型学习更为多样的特征,以实现更好学习。

此外,YOLOv7 通过拼接其来源模型(如 YOLOv4、Scaled YOLOv4、YOLO-R)的架构来进行规模化,满足不同推理速度需求。

YOLO Compound Scaling Depth

基于拼接的模型在深度与宽度上的复合缩放(来源)

可训练“免费礼包”

Bag-of-freebies 指在不增加训练成本的前提下提升模型精度,这正是 YOLOv7 同时提高推理速度与检测精度的原因。

YOLOv8:提升模块化与灵活性

YOLOv8 引入更模块化与灵活的设计,便于自定义与微调。内置支持目标检测之外的多种任务,如分割与姿态估计。

  • 轻量级模型进一步优化速度与精度的权衡,较小模型尺寸面向边缘设备的实时应用。
  • 新增对自定义数据的支持,便于集成自定义数据集,适配特定应用。
  • 新增 API,便于在生产环境进行部署与模型管理。

YOLO-NAS(神经架构搜索):优化架构

YOLO-NAS 利用神经架构搜索(NAS)自动设计优化架构,在无需手动调参的情况下最大化性能。

  • 在性能与资源使用间达成最佳平衡,适配高精度与低时延应用。
  • 可针对图像中不同物体自动调整分辨率,进一步优化推理流程。

YOLOv9:实时目标检测的突破性技术

YOLO-World:零样本目标检测

由腾讯 AI Lab 开发的 YOLO-World 引入新范式:“先提示,再检测”。与需针对特定类别训练的传统 YOLO 不同,YOLO-World 可基于文本提示直接检测物体,无需微调。

这一零样本能力无需即时文本编码,在 V100 GPU 上可达 74.1 FPS。YOLO-World 尤其适用于无需收集训练数据就需检测自定义物体的场景。

2024 年发布的 v9 版本引入多项创新技术,例如:

  • 可编程梯度信息(PGI):一种在训练中优化梯度流的新技术,更高效地从复杂数据集中学习。
  • 广义高效层聚合网络(GELAN):显著的架构增强,进一步提升特征学习与聚合,有助于同时提升精度与速度。

YOLOv9 在 MS COCO 上树立新基准,较前代在精度与跨任务适应性方面表现更优。尽管由独立开源团队开发,YOLOv9 基于 Ultralytics YOLOv5 的代码库,体现了社区协作推动目标检测边界。

该版本在训练流程与架构上均有重大改进,聚焦于实时应用的高效性、适应性与精确性。

YOLOv10:免 NMS 的实时目标检测

由清华大学研究者于 2024 年 5 月发布,YOLOv10 在实时目标检测上实现重要突破。其关键创新是在推理阶段移除非极大值抑制(NMS),避免了检测流程的额外时延。

YOLOv10 在训练中引入一致的双重分配,将一对多与一对一标签分配结合,从而在保持训练高效的同时实现免 NMS 推理。论文称,YOLOv10-S 在相近精度下较 RT-DETR-R18 快 1.8×,且参数量更少(约 2.8×)。

YOLOv11:增强的模块化与多任务支持

由 Ultralytics(YOLOv5 与 YOLOv8 的创建者)开发,YOLOv11 支持多项视觉任务:目标检测、实例分割、图像分类、关键点检测与旋转边界框(OBB)检测。YOLOv11x 在 MS COCO 基准上取得 54.7% mAP。

YOLOv12:基于注意力的架构

YOLOv12 将注意力机制引入 YOLO 架构,提升模型聚焦相关图像区域的能力。在保持实时性能的同时,在具重叠目标的复杂场景上取得更高精度。

YOLO26:最新进化(2026)

YOLO26 由 Ultralytics 于 2026 年 1 月发布,是端到端、面向边缘优化的模型,支持五大核心任务:目标检测、实例分割、姿态估计、定向目标检测(OBB)与图像分类。在保持快速推理的同时,达到 YOLO 系列中的最高精度。

YOLO26 提供多种模型尺寸(Nano、Small、Medium、Large、Extra Large),以在不同部署场景下平衡精度与速度。安装与使用方式如下:

from ultralytics import YOLO

# Load the model
model = YOLO("yolo26m.pt")

# Run inference
results = model("image.jpg")
results[0].show()

结论

本文介绍了 YOLO 相较其他最前沿目标检测算法的优势,以及其从 2015 到 2026 年的演进与关键改进。

鉴于 YOLO 的快速发展,毫无疑问,它将在相当长时间内继续引领目标检测领域。

本文的下一步将把 YOLO 算法应用到真实案例。在此之前,您可以先学习我们的 Introduction to Deep Learning in Python 课程,掌握神经网络基础,并使用 Keras 2.0 在 Python 中构建深度学习模型。

常见问题

我们可以在视频上使用 YOLO 吗?

可以。YOLO 是实时检测算法,既可用于图像,也可用于视频。

YOLO 比 Faster R-CNN 更好吗?

就平均精度均值(mAP)而言,Faster R-CNN 达到 87.69%。但 YOLOv3 速度极快,其每秒帧数(FPS)约为 Faster R-CNN 的 8 倍。

为什么 YOLO 被称为 You Only Look Once?

因为 YOLO 在一次前向传播中就预测出图像中的所有目标。

YOLO 能检测多少个类别?

YOLO 能够同时检测 9000 多个类别。

2026 年 YOLO 的最新版本是什么?

最新版本是 YOLO26,由 Ultralytics 于 2026 年 1 月发布。它支持目标检测、实例分割、姿态估计、旋转边界框(OBB)和图像分类。YOLO26 在保持适合边缘部署的快速推理的同时,达到了 YOLO 系列中的最高精度。

YOLO 与 Faster R-CNN 有何区别?

YOLO 是单阶段检测器,在一次前向传播中处理图像,速度更快(45+ FPS),但对小目标有时不够精确。Faster R-CNN 是两阶段检测器,先生成候选区域再分类——精度更高(87.69% mAP),但速度更慢(约为 YOLOv3 的 1/8)。实时应用选 YOLO,当精度比速度更重要时选 Faster R-CNN。

如何安装并运行 YOLO?

使用 pip install ultralytics 安装 Ultralytics 库。然后在 Python 中运行推理:

from ultralytics import YOLO
model = YOLO('yolo26m.pt')
results = model('image.jpg')
results[0].show()

也可使用 CLI:yolo detect predict model=yolo26m.pt source=image.jpg


Zoumana Keita 's photo
Author
Zoumana Keita
LinkedIn
Twitter

一位多才多艺、乐于分享知识并回馈他人的数据科学家。Zoumana 是 YouTube 内容创作者,也是 Medium 上的顶尖科技写作者。他热爱演讲、编程与教学。Zoumana 拥有两个硕士学位:其一是在法国巴黎获得的计算机科学硕士,专注于机器学习;其二是在美国德州理工大学获得的数据科学硕士。他的职业生涯始于法国 Groupe OPEN 的软件开发工程师,随后加入 IBM 担任机器学习顾问,为保险公司构建端到端的 AI 解决方案。之后,Zoumana 加入了 Axionable——一家总部位于巴黎与蒙特利尔的首家“可持续 AI”初创公司。在那里,他担任数据科学家,为来自法国、蒙特利尔、新加坡和瑞士的客户交付 AI 产品,主要聚焦 NLP 场景。此外,他将 5% 的时间投入到研发工作。目前,他在 IFC(世界银行集团)担任高级数据科学家。

主题
数据科学

深度学习课程

{count, plural, other {课程}}

R 中的聚类分析

{hours} 小时
44.4K
培养对层次聚类和 k-means 聚类工作原理的直觉,并学习如何将其应用于从数据中提取洞察。
查看详情Right Arrow
开始课程
查看更多Right Arrow