Yolo V1 详解
本节内容
该文章涉及如何选择预选框、YOLOV1的网络结构以及卷积计算、最终的损失计算过程。
如果对于IOU、mAP、recall、precision不了解,请先了解以上指标如何计算的。
检测指标Blog:
如果不懂得卷积计算,可以看我的文章
卷积计算Blog:【卷积计算】-单通道卷积 -深度卷积(多通道卷积) -逐点卷积 -实战YoloV1卷积网络 - 池化计算-CSDN博客
特点
- 经典的one-stage方法
- You only look once
- 检测问题转换为回归问题,一个CNN搞定
- 可以对视频进行实时检测,应用领域非常广泛
核心思想
每个点,计算的时候存储confidence,设置阈值
每个点存储:
- 中心点x
- 中心点y
- 预选框宽度w
- 预选框高度h
- 置信度confidence
如果满足阈值,在两种候选框中,分别计算IOU的值,选择合适的
输入图片
图片大小(448,448,3)
因为卷积层和全连接层的大小是固定的,所以图片大小不可改变,这里要求input图片大小固定(448,448,3)。
- 在Yolov2之后,取消了fully connected全连接层,图片大小就可以改变了。
通过grid cell分类
图片分割为7 * 7大小的grid cell;在每个grid cell 里面存储30个信息。👇
Our final prediction is a 7 * 7 * 30 tensor,20 types and 2 bounding box with 5 parameter
-
每个bounding box存储信息(Xt,Yt,Ht,Wt,Confidence)
-
每个grid cell 存储30个信息
其中Xt和Wt是相对于width的归一化坐标;其中Yt和Ht是相对于High的归一化坐标;
在这里没有anchor的思想,并不是相对于anchor box的相对位移;而是直接预测(x,y,w,h)信息
Define Confidence
在论文中定义confidence的计算
Pr(Object)=1(如果这个预测框存在目标)or 0 (不存在)
IOU=truth和pred的交集部分/truth和pred的并集部分
所以在这里我们可以理解confidence是IOU
计算类别概率
最终的类别概率 = bounding box 为该类别的概率 * IOU(truth and pred)
V1网络结构
V1的网络结构借鉴了GoogleNet,采用Conv和Fully connected。
Yolo版本 | 网络结构 |
---|---|
YoloV1 | 借鉴googleNet,采用Conv和Fully connected结构 |
YoloV2 | 借鉴DarkNet19 |
YoloV3 | 借鉴DarkNet53 |
下图是YoloV1的网络结构
卷积池化过程
图中(448,448,3) 经过特征提取得到(7,7,1024)
提取特征的过程是完成以下过程,完成特征提取。
如果不太了解卷积计算请看以下内容,目前已经更新常用的卷积核类型
【卷积计算】-单通道卷积 -深度卷积(多通道卷积) -逐点卷积 -实战YoloV1卷积网络 - 池化计算-CSDN博客
Layer | Stride,Padding | Output |
---|---|---|
input | (448,448,3) | |
Conv (7,7,64) | S=2,P=3 | (224,224,64) |
Maxpooling | S=2 | (112,112,64) |
Conv (3,3,192) | S=1,P=1 | (112,112,192) |
Maxpooling | S=2 | (56,56,192) |
Conv (1,1,128) | S=1,P=1 | (56,56,128) |
Conv (3,3,256) | S=1,P=1 | (56,56,256) |
Conv (1,1,256) | S=1 | (56,56,256) |
Conv (3,3,512) | S=1,P=1 | (56,56,512) |
Maxpooling | S=2 | (28,28,512) |
Conv (1,1,256) | S=1 | (28,28,256) |
Conv (3,3,512) | S=1,P=1 | (28,28,512) |
Conv (1,1,256) | S=1 | (28,28,256) |
Conv (3,3,512) | S=1,P=1 | (28,28,512) |
Conv (1,1,256) | S=1 | (28,28,256) |
Conv (3,3,512) | S=1,P=1 | (28,28,512) |
Conv (1,1,256) | S=1 | (28,28,256) |
Conv (3,3,512) | S=1,P=1 | (28,28,512) |
Conv (1,1,512) | S=1 | (28,28,512) |
Conv (3,3,1024) | S=1,P=1 | (28,28,1024) |
Maxpooling | S=2 | (14,14,1024) |
Conv (1,1,512) | S=1 | (14,14,512) |
Conv (3,3,1024) | S=1,P=1 | (14,14,1024) |
Conv (1,1,512) | S=1 | (14,14,512) |
Conv (3,3,1024) | S=1,P=1 | (14,14,1024) |
Conv (3,3,1024) | S=1,P=1 | (14,14,1024) |
Conv (3,3,1024) | S=2,P=1 | (7,7,1024) |
Conv (3,3,1024) | S=1,P=1 | (7,7,1024) |
Conv (3,3,1024) | S=1,P=1 | (7,7,1024) |
Transpose
transpose 转置;
- 并非是每次都会用到的(非深度学习的基础设施)(一种上采样的方法)
特征提取的专职操作通常指的是转置卷积,也称为反卷积或上采样卷积。用于从较小的特征生成较大的特征映射的场景,主要目的是增加数据的空间维度,与传统的卷积操作相反,他是通过零填充来扩大输入特征图的,然后应用到卷积核的,以此生成具有更大空间尺寸的输出特征图。
Flatten
flatten 扁平化
- 用于将多维度的输入数据转换为一维的数组,通常在卷积神经网络CNN与全连接层Dense Layer使用。
- 假设有一个三位特征图,使用Flatten操作之后,这个特征图会转换为一维数组,作为全连接层输入,用于后面的分类、回归等后续任务。
- Flatten本身不改变数据的总量,只是改变数据的形状,使其输入到全连接层中。
全连接层
FC,fully connected
(7,7,1024)Tensor 与 4096个神经元连接,组成全连接层,(7,7,1024)中的所有元素与4096个神经元全部连接。意味着这个层负责将(7,7,49)维的高级表示映射到一个4096更低维度的空间,以满足任务的需要。可以用于包括分类、回归或其他任务
Reshape
因为最后要映射到7 * 7 * 30的Tensor上,所以要进行一次reshape
Define Loss Function
损失分为三个部分:在计算boundingbox的损失时,考虑了不同形状的预选框大小对loss的影响
- bounding box 预选框损失(计算(x,y)的位置误差平方和 + 计算(w,h)形状开根号的误差平方和)(正样本)
- confidence 损失(confidence的误差平方和)(正样本、负样本)
- classes 损失(分类概率的误差平方和)(正样本)
非极大值抑制
选用IOU或概率最大的,非最大的不采用为正样本。
Limitaion
- 快速简单但是每个cell只能预测一个类别,如果出现重叠无法解决
- 长宽比可以选择但是比较单一
- 群体性小目标很难预测(bounding box种类少)
- 目标出现新的尺寸或者配置
- 定位不准确(直接预测目标坐标信息的方法导致定位信息不准确)
参考视频:
【3.1 YOLO系列理论合集(YOLOv1~v3)】 https://www.bilibili.com/video/BV1yi4y1g7ro/?p=2&share_source=copy_web&vd_source=a6e29e420e8c019a3e5c4c5485362849