yolo v1的笔记&简单理解
本笔记参考自b站视频视频链接
首先简单了解一下yolov1的网络结构
yolov1的运作过程大致分为3部分:模型训练,模型预测和后处理(非极大抑制)
1、模型训练过程
v1的损失函数如下图,(关于grid cell和bounding box现在可能不太理解,看了后文再回来看应该就可以理解了)
每个grid cell有2个bounding box,从2个中选一个检测物体。损失函数由5部分组成,前两部分是负责检测物体吧boundind box的位置误差(中心点和宽高),中间两部分为两个bounding box的置信误差,最后一部分是负责检测物体的grid cell的分类误差。
2、模型预测过程
通俗讲,就是把图片分为SxS(上图为7x7)个格子(grid cell),每个格子预测两个部分,第一个部分是两个bounding box(可能的边界框),每个bounding box包含位置(x,y,h,w)和可能性c(置信度)5个信息;第二部分是该格子最可能的的类别(20个中最大的一个)。所以每个格子都含有5(第一个bounding box)+5(第二个bounding box)+20(20个种类的概率)=30个参数,通过yolo的结构,输入448x448x3的图片,输出7x7x30的张量。(关于张量的概念这里不做解释,可以简单理解为多维矩阵)
3、后处理&nms非极大抑制值
后处理是为了将预测所得的7x7x30的张量变为最终结果
每个grid cell有30个参数(5+5+20),首先对每个grid cell用它每个bounding box的置信度(c)乘20个种类每个种类的概率得到每个种类的概率(20x1的张量)。一共可以得到98(7x7x2)个20x1的张量。98个框如上中图所示。
对20x1张量中每个种类概率进行排序(以dog为例),将小于某阈值的概率归零,其余框两两比较,若两框交并比大于某阈值(如0.5)则可看作两框检测到了同一物品,将概率较小那框归零。如下图所示
对其余种类做同样的操作,最后保留概率最大的框,得到最终结果。