YOLO v1

1 网络结构

图1
上图为YOLO v1的网络结构图,下图为详细说明。共24个卷积层4个池化层两个全连接层
以输入 448 ∗ 448 ∗ 3 448*448*3 4484483滤波器为 7 ∗ 7 ∗ 64 7*7*64 7764输出为 224 ∗ 224 ∗ 64 224*224*64 22422464为例:
滤波器算子的深度和上一层输入的数据深度一致!!!所以每个算子尺度为 7 ∗ 7 ∗ 3 7*7*3 773,一个算子遍历整张图像得到 224 ∗ 224 ∗ 1 224*224*1 2242241(注意:步长为2)所以经过这个卷积层的输出为 224 ∗ 224 ∗ 64 224*224*64 22422464
论文中记做 7 ∗ 7 ∗ 64 − s − 2 7*7*64-s-2 7764s2
所以每一卷积层的输出深度就是这一卷积层中滤波器的数量
再以第一个全连接层为例:
等效于 4096 4096 4096 7 ∗ 7 ∗ 1024 7*7*1024 771024的算子得到的结果
图2

2 LOSS FUNCTION

在这里插入图片描述

图3
λ c o o r d = 5 λ_{coord}=5 λcoord=5 λ n o o b j = 0.5 λ_{noobj}=0.5 λnoobj=0.5
宽和高要开根号:强化小目标的损失
1 i j o b j 1^{obj}_{ij} 1ijobj:标签中包含物体且对其负责的格点处该值为1,不包含物体,该值为0
1 i o b j 1^{obj}_{i} 1iobj:网格i中有物体为1,没有为0
1 i j n o o b j 1^{noobj}_{ij} 1ijnoobj:标签中不包含或不负责物体的格点处该值为1

带^的是标注,不带的是网络中输出的结果

3 训练样本的标签

一张图像通过神经网络得到 7 ∗ 7 ∗ 30 7*7*30 7730的输出,那自然一张图像的标签信息也是 7 ∗ 7 ∗ 30 7*7*30 7730,每个网格有30维的输出(20个类别概率,两个bbox各有4个坐标信息和一个置信度信息)即 7 ∗ 7 ∗ ( 20 + 5 ∗ 2 ) 7*7*(20+5*2) 7720+52
在这里插入图片描述
图中共有3个物体,已确定其中心所在的网格,那这三个网格对应的20维得到对象分类概率对应的物体为1,其余19项为0,一共49个网格,那剩下46个网格的对象分类概率呢?全为0!
再来看bbox的10维信息,含有物体的这3个网格各有两个bbox,根据网络输出的坐标信息和ground truth计算IoU,较大的即视为负责这个物体,它的置信度为IoU,其他不负责和不存在物体的bbox的置信度都为0,如图所示,这3个负责物体的bbox的标注信息(坐标为真实的位置坐标,置信度为IoU),其他的98-3=95个bbox置信度为0,坐标无所谓(因为坐标损失不计算剩余95个bbox)
在这里插入图片描述
在这里插入图片描述
再回过头看LOSS函数就悟了!!!
计算LOSS的时的类别预测(最后一行),P是输出的,P^是19个0一个1这样如上图所示

3 预测

用IOU×类别概率得到类别分数是在训练的时候用到,使用NMS的方法,预测的时候就没有标注了!没有标注自然就没有IoU了
每个bbox都得到一个20维的类别分数(score=p*confidence(网络的输出))

每个网格有:20个对象的概率*2个bounding box的置信度,共40个得分(候选对象)。49个网格共1960个得分。Andrew Ng建议每种对象分别进行NMS,那么每种对象有 1960/20=98 个得分。

NMS步骤如下:
1)设置一个Score的阈值,低于该阈值的候选对象排除掉(将该Score设为0)
2)遍历每一个对象类别
 2.1)遍历该对象的98个得分
  2.1.1)找到Score最大的那个对象及其bounding box,添加到输出列表
  2.1.2)对每个Score不为0的候选对象,计算其与上面2.1.1输出对象的bounding box的IOU
  2.1.3)根据预先设置的IOU阈值,所有高于该阈值(重叠度较高)的候选对象排除掉(将Score设为0)
  2.1.4)如果所有bounding box要么在输出列表中,要么Score=0,则该对象类别的NMS完成,返回步骤2处理下一种对象
3)输出列表即为预测的对象

残留问题

网络结构最后一个全连接层咋回事?
LOSS方程的参数还是似懂非懂,网上的说法不一?
怎么确定某一个框是否对某一个物体负责?
明明有20维的数据表示20个物体种类的可能性,为啥还说是一个框只表示一个物体?
IOU计算时要扣像素吗还是以网格线为边界?
和两阶段法的区别是直接将框和置信度一起预测出来?

回归的思想怎么体现?
我裂开辣
某个物体的中心落在某个网格中,该网格就负责这个物体 and 与ground truth的IOU最大的那个BBOX负责这个物体???????????
书读百遍其义自见
30Hz DPM与100Hz DPM的HZ是GPU的工作频率?不是!应该是刷新率
将两个网络模型结合起来是一个接在一个后边吗? 视上下文语境,这也是一种方法
论文2.4前面这句话啥意思??“一些大的目标或接近多个网格单元的边界的目标能被多个网格单元定位”
想问一下IOU作为标签的值每次都需要更新吗 还是一直使用第一次的IOU作为标签

论文笔记

不管边界框的数量是多少,每个网格只预测一组类别概率
YOLO并没有试图优化大型检测流程的各个部分,相反,它被设计为快速检测,完全抛弃该流程。
Fast 和 Faster R-CNN 通过共享计算和使用神经网络替代选择性搜索[14],[28]来提出候选区域来加速R-CNN框架。虽然它们提供了比R-CNN更快的速度和更高的准确度,但仍然不能达到实时性能。
YOLO是一种通用的检测器,它可以同时检测多个目标。

参考文档

https://zhuanlan.zhihu.com/p/220062200
https://hackernoon.com/understanding-yolo-f5a74bbc7967
https://blog.youkuaiyun.com/qq_38236744/article/details/106724596
https://blog.youkuaiyun.com/qq_43602882/article/details/105910176
https://www.jianshu.com/p/cad68ca85e27

03-10
### YOLO V1 算法介绍 YOLO (You Only Look Once) 是一种用于实时目标检测的单阶段神经网络架构。该方法将输入图像划分为 S×S 的网格,如果某个对象的中心落在一个特定的网格单元内,则此网格负责预测该对象[^1]。 对于每一个网格单元,YOLO 预测 B 个边界框及其置信度分数。这些置信度反映了模型认为存在对象的程度以及所预测边框与实际位置匹配的好坏程度。此外,每个网格还会预测 C 类条件概率 Pr(Class|Object),即当有对象存在于这个格子时属于不同类别的可能性。值得注意的是,在测试过程中,仅需考虑来自含有对象的那个网格的概率即可。 #### 实现方式 YOLO v1 使用卷积神经网络来处理整个图像,并将其视为回归问题直接从像素到边界框坐标和类别概率的空间映射。具体来说: - 输入固定大小(通常是448 × 448)的图片; - 输出是一个张量,形状为 \(S \times S \times (B*5+C)\),其中\(S\)表示划分后的网格数量,\(B\)代表每个网格预测多少个矩形框,而\(C\)则是可能存在的物体种类数; 为了训练这种类型的模型,损失函数被设计成能够同时优化定位误差、分类错误以及没有目标区域内的背景误报率。通过这种方式,YOLO能够在一次前向传播中完成所有的预测工作,从而大大提高了速度并降低了延迟时间。 ```python import torch.nn as nn class YOLOv1(nn.Module): def __init__(self, num_classes=20, grid_size=7, boxes_per_cell=2): super(YOLOv1, self).__init__() # 定义CNN层... def forward(self, x): ... return output_tensor_of_shape_SxSxBxC_plus_5_times_B ``` #### 应用案例 YOLO v1 能够实现实时的目标识别与追踪任务,这使得其适用于多种应用场景,比如自动驾驶汽车中的障碍物检测、安防监控系统的入侵报警等。另外,由于其高效的特性,也被广泛应用于移动设备端的小型化部署方案之中。例如,在视频流分析方面,可以利用 YOLO 来监测交通流量或者行人行为模式,提供更加智能化的城市管理解决方案[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值