0
点赞
收藏
分享

微信扫一扫

YoloV1学习(1)

泠之屋 2022-04-03 阅读 34
python

1、网络结构

YOLOv1--从样本标签与训练输出角度分析
入口

全连接前面必须进行扁平化处理:

 x = x.view(-1, 14*14*128)

对输入张量进行扁平化处理,即将128个14x14的feature maps转化为1x(14x14x128)的二维张量,作为全连接层输入。14x14x128=25008。
25008个输入作为X,X=[x1,x2,…,x25008],W是输入到输出的转化参数,是二维的,一个维度对应输入的个数(x的数量,共有25008),以完成对x的一一对应相乘。另一个维度对应输出个数,假设这里输出要求为1024个。W中的25008即与非扁平化理解中的三维卷积核14x14x128对应,共有1024个这样的卷积核,对应输出1024。

2、卷积层

3、全连接层
全连接层通俗讲解

在卷积神经网络的最后,往往会出现一两层全连接层,全连接一般会把卷积输出的二维特征图转化成一维的一个向量,这是怎么来的呢?目的何在呢?

举个例子:
在这里插入图片描述
最后的两列小圆球就是两个全连接层,在最后一层卷积结束后,进行了最后一次池化,输出了20个1212的图像,然后通过了一个全连接层变成了1100的向量。

这是怎么做到的呢,其实就是有20100个1212的卷积核卷积出来的,对于输入的每一张图,用了一个和图像一样大小的核卷积,这样整幅图就变成了一个数了,如果厚度是20就是那20个核卷积完了之后相加求和。这样就能把一张图高度浓缩成一个数了。

全连接的目的是什么呢?因为传统的网络我们的输出都是分类,也就是几个类别的概率甚至就是一个数–类别号,那么全连接层就是高度提纯的特征了,方便交给最后的分类器或者回归。

但是全连接的参数实在是太多了,你想这张图里就有201212100个参数,前面随便一层卷积,假设卷积核是77的,厚度是64,那也才7764,所以现在的趋势是尽量避免全连接,目前主流的一个方法是全局平均值。

也就是最后那一层的feature map(最后一层卷积的输出结果),直接求平均值。有多少种分类就训练多少层,这十个数字就是对应的概率或者叫置信度。

4、输出
Yolov1关于输出的处理:
简单来说输出就是一个7×7×30的张量。为何是这个尺寸,又包含哪些信息呢?
首先需要知道YOLO的一些规定:
YOLO将图像分成S×S(S=7)的网格grid cell,并且每个网格单元负责预测B(B=2)个边界框box。加上每个边界框box的置信度confidence,每个网格的C(C=20)个条件类别概率。

7*7的网格设计
根据YOLO的设计,输入图像被划分为7×7的网格(grid cell),输出张量中的7×7就对应着输入图像的7×7网格或者说输出就是7×7=49个30维张量,正如上图所示,两个橙色的gridcell各自对应着输出中对应位置的两个30维向量

要注意的是,并不是说仅仅网格内的信息被映射到一个30维向量。经过神经网络对输入图像信息的提取和变换,网格周边的信息也会被识别和整理,最后编码到那个30维向量中。
在这里插入图片描述

在这里插入图片描述
1)20个对象的概率

​ 因为YOLO支持识别20种不同的对象,(人、鸟、猫、汽车、椅子等),所以这里有20个值表示该网格位置存在任一种对象的概率。可以记为
在这里插入图片描述

意思是如果网格存在一个对象Object,那么它是Ci的概率是P(Ci|Object)

(2)两个bounding box的位置

​ 每个bounding box需要4个数值来表示其位置,(Center_x,Center_y,width,height),即(bounding box的中心点的x坐标,y坐标,bounding box的宽度,高度),2个bounding box共需要8个数值来表示其位置。

​ 需要强调的是,这里的x,y,w,h都是归一化的坐标,并且x,y是相对于该bounding box所在的grid cell的左上角的偏移量。
​ 对与w,h的归一化比较简单:w=框的宽度/图片总宽度,h=框的高度/图片总高度

​ 因为x,y只是bounding box中心点的相对于所在grid cell左上角的偏移,具体而言如下图
在这里插入图片描述如图,绿色框框的那个grid cell有一个bouding box,这个boundingbox的中心是红点,这个红点的坐标计算公式如下:
在这里插入图片描述
在这里插入图片描述这个x,y是绿色grid cell 左上角的偏移量,因为是归一化后的结果,所以x,y的值在(0,1)范围

例如这个坐标为(0.4,0.7),如果是在这个网格坐标系(即横纵轴范围0~7),那么红点在网格坐标系实际的坐标为(1.4,4.7),同样也可以将xywh放缩到image实际的大小,也就可以在image中画出这个红框了。
 YOLO最后采用非极大值抑制(NMS)算法从输出结果中提取最有可能的对象和其对应的边界框。

输入一张图片到YOLO网络将输出一个7730的张量表示图片中每个网格对应的可能的两个边界框以及每个边界框的置信度和包含的对象属于各个类别的概率。由此可以计算某对象i属于类别 同时在第j个边界框中的得分:
在这里插入图片描述
每个网格有20个类条件概率,2个边界框置信度,相当于每个网格有40个得分,7x7个网格有1960个得分,每类对象有1960/20=98个得分,即98个候选框。

NMS步骤如下:

1.设置一个Score的阈值,一个IOU的阈值;

2.对于每类对象,遍历属于该类的所有候选框,

①过滤掉Score低于Score阈值的候选框;

②找到剩下的候选框中最大Score对应的候选框,添加到输出列表;

③进一步计算剩下的候选框与②中输出列表中每个候选框的IOU,若该IOU大于设置的IOU阈值,将该候选框过滤掉,否则加入输出列表中;

④最后输出列表中的候选框即为图片中该类对象预测的所有边界框

参考:https://blog.csdn.net/qq_43602882/article/details/105910176

举报

相关推荐

0 条评论