前三篇博客我们从三个方向过了一遍yolov3框架结构,最后这篇来总结一下yolo的亮点和不足。
以下就木有配图了,有兴趣的大家耐心过一下。
首先聊聊它出彩的地方。
1、yolo系列最让人激动的形式在于you only look once,一次性就完成所有的预测和检测任务,这是rcnn结构下没办法做到的。其主要得益于loss的逻辑设计上。
(1)在计算loss的时候,真实值和预测值设计成了batchsize x grid x grid x num_anchor x 25(或者85)的形式,其中grid代表着三层输出的大小,在数据feed阶段,把annotation值间接转换到grid维度上,参与计算。这一步,对相应的层的目标预测做足了准备,解决了“grid”与“绝对位置”的关系
(2)num_anchor直接代表着该输出层该使用哪一个anchor(第一层678三个anchor,第二层使用345,第三层使用012),这里,又把“grid”和“anchor”建立起了联系
(3)另外,在最后一个维度(25),前四个值(xywh),代表的是预测具体物体的相对位置和相对大小,这一步的设计,把“grid”和box(相对位置)给联系起来了
(4)以上三个点,把整个输出所需要的所有关键数据全部联系起来了,让整个数据做到端到端的完整映射。这一方面确确实实很大程度上归功于数据的结构设计与损失函数的设计的结合,让yolo能够实现一次完成任务。
2、说到损失函数,最后计算loss的几