YOLOv1 和 YOLOv2 面试要点梳理

一、YOLOv1 详解

(一)算法诞生背景

在 YOLOv1 出现前,目标检测领域主要有滑窗检测算法和区域检测算法。滑窗检测把目标检测转化为图像识别,依据滑窗位置确定物体位置,但滑窗重叠严重,效率低下,且视野局限于滑窗内,无法获取目标整体信息。区域检测算法则采用分水岭算法等,但相关资料未详细阐述其优劣势 。

(二)算法核心思想

YOLOv1 是基于深度学习与卷积神经网络的单阶段通用目标检测算法,将目标检测问题转化为回归问题,避免了提取候选框的繁琐过程。训练时,先对图像标注出检测目标的真实边界框(ground truth),把图像划分为 7×7 的网格(grid cell)。若目标中心点落在某个网格,该网格生成的 2 个边界框(bounding box)中,与 ground truth 交并比(IOU)较大的那个负责拟合真实边界框,另一个舍弃;若目标中心点未落在网格内,该网格生成的 2 个 bounding box 则直接舍去。每个 bounding box 需预测 x、y、w、h 四个位置参数(x、y 是中心点坐标,取值在 0 - 1 之间,w、h 可能大于 1)和位置置信度 confidence(0 或 1 乘以 IOU 值),每个网格还要预测 C 个类别的分数(预测目标对应类别分数为 1,否则为 0)。

预测阶段,输入图像被划分为 7×7 网格,每个网格生成 2 个预测框,每个框包含 4 个位置参数和 1 个置信度参数,每个网格还预测一组条件类别概率。以 PASCAL VOC 数据集(20 个类别)为例,最终会得到 7×7×30 维度的向量。之后,经置信度过滤和非极大值抑制(NMS)处理,去除低置信度和重复的预测框,得到最终检测结果。

(三)关键技术细节

  1. 网络结构:由 24 层卷积层和 2 层全连接层组成。输入 448×448×3 的 RGB 图像,经一系列卷积、池化操作,得到 7×7×1024 维张量,再经全连接层处理,最终 reshape 为 7×7×30 的张量,包含所有预测框的坐标和类别信息。在网络结构的计算过程中,如 448×448 到 224×224 的转换,因采用 SAME 填充方式,依据卷积计算公式得到输出尺寸为 224×224。
  2. 激活函数:除最后一层使用线性激活函数外,其余层采用 LeakyReLU 激活函数(x>0 时,f (x)=x;x<0 时,f (x)=0.1x ),相较于传统 ReLU 函数,LeakyReLU 在 x<0 时能保留一定梯度,避免梯度消失问题。
  3. 损失函数:由 bounding box 损失、confidence 损失、classes 损失构成,采用平方和误差计算。由于图像中目标与非目标数量不均衡,为减少非目标对结果的影响,对负责检测物体的 bounding box 权重设为 5,不负责的设为 0.5 。此外,计算根号下的误差平方和可降低大物体边框对损失的影响。

(四)算法优缺点

优点是采用 One stage 架构,检测速度快。缺点包括对拥挤、密集型物体检测效果差,因 7×7 个网格最多预测 49 个物体;对小物体检测不佳;未使用 Batch Normalize;分类正确但定位误差大,尤其对小物体明显;召回率低,仅能生成 98 个 bounding box,远少于同期 Faster RCNN 的 2000 个候选框。

二、YOLOv2 解析

(一)anchor box 与 bounding box 差异

anchor box 依据预测物体形状设计,bounding box 则根据预测分类设计。例如,预测男人、女人、汽车时,可根据形状用 2 种 anchor box,根据类别用 3 种 bounding box。

(二)主要改进点

  1. Batch Normalization 应用:在每个卷积层后添加 BN 层,训练时对神经元响应标准化,使其均值为 0、标准差为 1,再进行归一化并乘 γ 加 β;测试时使用训练阶段的全局参数,BN 层相当于线性变换。这一操作加快了网络训练速度,避免梯度消失,改善了梯度,使模型收敛更快。
  2. 高分辨率输入:YOLOv1 先在 224×224 分辨率下预训练,后为提高定位精度改为 448×448 分辨率继续训练;YOLOv2 一开始就采用 448×448 分辨率,使网络能更好地适应大分辨率输入。
  3. 基于卷积的 anchor box:YOLOv2 去掉全连接层,使用 anchor boxes 预测 bounding boxes,通过预测 anchor box 的偏移量简化问题,让神经网络学习更轻松。同时,去掉一个池化层,使网络在 416×416 分辨率运行,卷积层以 32 下采样,输出 13×13 的特征图。
  4. 维度聚类确定 anchor box:通过 Kmeans 聚类在训练集物体边框数据上确定初始 anchor boxes 的大小和数量(v2 用 5 个)。聚类时采用 IOU 度量(d (box, centroid) = 1 - IOU (box, centroid)),避免欧式距离受框大小影响。
  5. 直接位置预测优化:引入 anchor box 后,为解决模型不稳定问题,将预测边框中心点相对于网格左上角的偏移值用 sigmoid 函数约束在 0 - 1,有效避免了预测框的无序偏移,使模型训练更稳定。
  6. 细粒度特征融合:通过 Passthrough layer 融合高层 13×13 分辨率特征与相对低层 26×26 分辨率特征。先将 26×26×512 的卷积层经 1×1 卷积核降维为 26×26×64,再经 Passthrough layer 变换为 13×13×256,与 13×13×1024 的高层信息相加,得到 13×13×1280 的信息,提升了特征表达能力。
  7. 多尺度训练:YOLOv2 输入尺寸为 416×416,为增强模型鲁棒性,每 10 个 batch 随机选择新的输入尺寸(范围是 320 - 608 且为 32 的倍数)。由于 Darknet19 有 Global Average Pooling 层,可处理不同尺寸输入图像,大图片精度高但速度慢,小图片速度快但精度低,从而实现速度与精度的平衡。

(三)损失函数、骨干网络与模型框架

  1. 损失函数:YOLOv2 损失函数包含置信度误差、定位误差和分类误差等部分,通过对不同部分设置权重,使模型在训练过程中更好地学习预测 anchor box 位置、置信度和类别,具体计算涉及遍历预测框、网格和 anchor 等操作。
  2. 骨干网络 Darknet - 19:Darknet - 19 有 19 个卷积层,在实际使用中,为与同类别分类网络对比,采用 224×224 作为网络输入。用于分类时,大量使用 1×1 卷积核降维和升维,输入 224×224×3 图像,输出 7×7×1000 张量,经全局平均池化得到 1000 个类别的概率。用于检测时,在分类模型基础上,增加 3 个 3×3 卷积层和 PassThrough 层,最后经 1×1 卷积层,得到 13×13×125 维度的张量。
  3. 模型框架:YOLOv2 使用 Darknet - 19 骨干网络,输入 416×416×3 图像,划分为 13×13 的网格,每个网格生成 125 维向量,包含 5 个 anchor,每个 anchor 有 4 个位置参数、1 个置信度参数和 20 个类别概率(13×13×5×(5 + 20))。图中每个 Convolutional 由 Conv2d 卷积层、BN 层和 LeakyReLU 激活函数组成,输出 Conv2d 为分类器,且卷积层不包含偏置 bias(因 BN 层会消除其作用)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值