Yolo 1
(以下内容是一年前记录下的)
关于yolo的作者我猜是一个特别有意思(骚)的人,这点从他的网站就可以看出
据说他的简历上也是这些马儿。
以下内容来自原作者关于yolov1的论文及自己的一些理解。
Yolo这个名字是 You only look once的缩写,这是因为yolo只需要将图片输入一次,便可以将相关结果输出,避免了利用滑动窗口和待选区域(region proposal-based) 将原图像分割,分别输入神经网络,将bounding box,classes的判别结合一个神经网络中这也是yolo高速的原因。
首先:
网络的输入是446*446大小的图片,经过24个卷积层与2个全连接层之后输出7*7*30个输出,关于为什么是7*7*30个输出,大部分博客包括作者的论文都将其解释为将原图分为7*7的栅格(grid),如下图,然后如果一个物体的中心落在其中一个格子中,那么这个格子就负责检测这个物体,至于30是因为每个格子有30个属性。这样说实际上是让人挺迷惑的。
我更倾向描述为,在输出节点中分别选出部分节点将其作为原图像一部分的映射训练网络,使这些节点的输出对应相应映射的属性。在此处,7*7代表我们将原图像分为7*7个部分,也就是说我们需要将输出节点分为7*7即49个部分分别作为相应部分的映射,30=20 + 2 *(4+1) 20代表训练时需要判断的类别数, 4+1 是bounding-box的属性,4分别是center_x,center_y,width,height, 1是这个bounding_box 的confidence ,乘以2的原因是每个部分需要预测两个bounding_box.。
而关于计算的细节在paper中有。
损失函数:
其中
这样做的原因主要是考虑到有些作为训练样本的图片中可能某个部分一直都不包含任何物体,这样会使其“confidence”趋近于0,所以减少关于未包含物体的损失
代表的是每个bounding_box的损失,定义为
,其中
后面的
为零
再之后就是对每个bounding_box进行非最大值抑制了。