YOLO系列-yolov1

网络架构

首先第一步拿到448*448*3的固定图片大小,固定值不代表只能检测固定大小的东西,固定值的意思只是把图片resize到固定值,图片里面的物体的坐标都会做相应的改变,还是可以映射到原始的输入数据当中。但是由于训练只训练了一个448*448*3的图片,这也是yolov1版本的局限,输入图片大小被限制住了,在后续的改进版本中可以把输入图片的大小做一些改变。yolov1有全连接层,所以必须做一个限制。
对输入数据做一个卷积操作,得到一个7*7*1024的特征图,第一个全连接转换成4092的特征,第二个全连接是1470,在reshape成7*7*30,表示把数据变成7*7的格子,每个格子要预测出30个值,因为yolov1在预测出两个框,假设第一个框坐标值是:B1:x1,y1,w1,h1。这里的坐标整个图片坐标的相对值,而不是绝对值,第二个框是:B2:x2,y2,w2,h2。对于每个框都需要判断一下是不是物体,其中每个框还有置信度C,第一个框是C1,第二个是C2。每个C大小是5,两个C大小是10,剩下20表示预测的类别概率,假设当前数据集有20个类别,则20表示每个位置是每个类别的概率值。简单来说就说20分类。YOLO系列-yolov1_第1张图片

损失函数

位置误差

这个公式的意思表示我当前这个框有S*S个网格要去计算每个网格,对于其中每一个格子都有两种框,取这两个框中置信度最大的一个,我们在上一步预测的x,y,w,h肯定会与真实值之间有差异,这里就需要一个损失函数,去最小化我的预测值与真实值之间的误差,这个损失函数也叫位置误差。然后算x,y真实值和预测值的差异,w,h也做同样的差异计算,但是不同的是w,h这里有个根号计算,这里是因为有些物体会比较大,有些会比较小,我们应该更注重w,h比较小的,因为根号x相对来说对比较小的数比较敏感,对较大的数敏感程度稍微差点。这里只是做了一点点改进。前面的系数表示权重项。
YOLO系列-yolov1_第2张图片

置信度误差

置信度需要分类考虑,因为在图像中有些地方是前景,有些地方是背景,在一个图像中一般背景会比较多。在做置信度的时候得分类来讨论,一种情况下预测的是前景,一种情况预测的是背景,我希望背景的时候置信度真实值为0,前景的时候置信度真实值是1,对每一个候选框都要去做这一个值,一旦这个候选框跟真实值的IOU大于0.5,这个0.5是可以自己设置的阈值,大于0.5的时候我认为它预测的可能是个前景,所以我希望当前这个框的置信度是1(越接近1越好)。跟真实框一般重叠的不止一个,我们只选IOU最大的那个来计算,IOU小的那个就不要。小于0.5的时候,这个时候就是背景就让它置信度等于0。

含有物体的置信度差异

在这里插入图片描述
置信度误差中计算置信度(就是实际预测的结果)和我的真实值(实际的IOU,而且IOU大于0.5才满足要求)之间的差异

不含物体的置信度差异

加了一个权重参数,在整个图片中背景会非常多,前景比较少,这样会导致样本不均匀,如果损失函数中不加这个权重项,那么可能大部分损失都由背景影响了,我们得让损失函数知道前景是更重要的,背景不是那么重要。

分类误差

在这里插入图片描述
这里和分类任务中的损失函数差不多,假设这里是预测是狗的概率,这里计算预测是狗的概率和真实是狗的概率算交叉熵。

YOLO系列-yolov1_第3张图片

NMS(非极大值抑制)

在预测框的时候,可能会检测许多框都是重叠的,在IOU满足一定值的时候先按照置信度进行排序,取置信度最大的拿出来,其他的不要
YOLO系列-yolov1_第4张图片

yolov1的问题

1.在图片中当前点只会预测一个类别,这样重合在一起的东西会很难检测(重叠的东西不好做预测)
2.小物体检测效果一般,长宽比可选但是比较单一。

你可能感兴趣的:(深度学习,深度学习,人工智能)