YOLO v1

目录

1 网络结构

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

2 LOSS FUNCTION

YOLO v1

YOLO v1
λ 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 7∗7∗30的输出,那自然一张图像的标签信息也是 7 ∗ 7 ∗ 30 7*7*30 7∗7∗30,每个网格有30维的输出(20个类别概率,两个bbox各有4个坐标信息和一个置信度信息)即 7 ∗ 7 ∗ ( 20 + 5 ∗ 2 ) 7*7*(20+5*2) 7∗7∗(20+5∗2)
YOLO v1
图*有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)
YOLO v1
YOLO v1
再回过头看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前面这句话啥意思??“一些大的目标或接近多个网格单元的边界的目标能被多个网格单元定位”

论文笔记

不管边界框的数量是多少,每个网格只预测一组类别概率
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.csdn.net/qq_38236744/article/details/106724596
https://blog.csdn.net/qq_43602882/article/details/105910176
https://www.jianshu.com/p/cad68ca85e27

上一篇:[Luogu 1919]【模板】A*B Problem升级版(FFT快速傅里叶)


下一篇:yolo_voc代码