如何理解YOLOv1的训练和预测过程?

        我在看YOLOv1的时候,发现自己虽然会用,也刷了很多视频,但是总感觉关于YOLOv1有些东西似懂非懂,所以想在这里再次给自己理清一下思路。

训练过程:

        我这里说的是我认为的核心部分:一张标注的图片,送入网络中,经过卷积池化操作,提取特征等最后在输出层就会得到7*7*30的张量,这个张量包含的信息是这样的7*7*((4+1)*2+20),7*7是YOLOv1会把送入网络的图片分成7*7的网格,(4+1)*2为,每个网格会预测两个大小不等的框,每个框包含的信息为它的位置信息,和它的置信度大小,20为在coco数据集上每个类别预测的概率。这张做过标注的图片,送入网络目的是训练网络,网络经过计算锁定了这个标注框的中心点所在的网格,那么下一步就是用这个网格产生的两个预测框,对标注框进行拟合,那么到底用两个框的哪一个作为预测框呢?答案是再进一步做计算,计算两个预测框和标注框的IOU,什么是IOU,说白了是两个框的交集除以并集,哪个IOU大,就最终确定哪个作为最终拟合标注框的预测框,其他的框都会被打入”冷宫“,现在根据这个框和标注框的信息建立损失函数:预测框包含的信息(它预测是框的位置信息,置信度得分,和对某个类别的预测概率),相对的该网格的标注框也会有相应是值与之对应,因此根据3个值就建立3个损失函数,分别是位置损失函数,置信度损失函数和分类损失函数,他们的总损失,就是这三个损失函数值的加和,有了总损失,网络根据这个损失函数做反向传播,梯度跟新,这个过程更新了网络的权重和偏置,然后下一张训练图片送入网络开始相同的过程,网络不断的迭代,最后就训练出你想要精度的模型。

预测过程:

        经过训练之后,我们得到了想要精度的模型,我们就可以用这个模型做预测了,输入一张图片,经过卷积池化等提取特征等操作,最后网络会输出7*7*30的张量,其实有一张可视化的图可以很好的描述这个预测出的7*7*30等张量,我在文末贴这个图,我们现在实际上是得到了98个框,因为每个网格会预测出2个框,49个框就会预测出98个框,我们现在把49个30长度的张量一字排开,现在就是要用一种叫做非极大值抑制(NMS)的算法来得到我们最后的预测信息,怎么操作呢?对于小狗这个类别,我们找到对小狗预测概率最大的那个预测框,根据概率的大小从左往右排开,然后设置一个最低的阈值,将低于这个阈值的预测框对于这个类别的概率置0,然后开始左筛选,顺序是从左往右,计算最高的预测狗这个类别的预测框和次高预测狗这个类别的预测框的IOU,如果比设置的阈值是0.5,那么如果说,它俩的IOU最后计算的结果大于0.5,那么我们就把次高的这个预测狗的类别的预测框舍弃,因为我们认为IOU大于0.5,就意味着次高的预测框做了重复预测,一次类推,最高这个预测框会依次和后面的预测框进行比较,到最后一个预测狗这个类别概率的预测框比较完成,然后就是找到次次高的预测狗这个类别的预测框,重复相同的过程。。。。,最后的结果可能是,我们得到了不同置信度的多个预测狗这个类别的预测框,不过没关系,不用但心预测预测框过多,我们最后还是会设置一个阈值来规律低置信度的预测框,狗的预测框筛选完成之后,我们再对猫,帽子,等等做筛选,就这样迭代20次(因为有20个类别),NMS过程就结束了,我们就得到了预测的结果。
        如何理解YOLOv1的训练和预测过程?_第1张图片

你可能感兴趣的:(YOLOv1,深度学习,目标检测)