预测阶段(直接使用网络进行预测了)
yolov1的网络结构,输入是一个448x448x3的彩色图像。输出7x7x30的张量,这个张量里面包含了类别、置信度等等信息。
yolov1中的s=7,每一个grid cell有b个bounding box,这里b=2,这些box有大有小,只要box的中心点落在grid cell就行,每个box有4个参数,其中c表示粗细程度,反映是否是目标的置信度。每个grid cell还可以预测是哪个目标的概率(假设它包含物体的基础上,是某一个类别的概率,下面这个彩色的图),将每个bounding box的置信度乘以grid cell的条件概率,就是bbox的是某一个物体的概率。这些信息都是从之前那个7x7x30的张量里面的。
7x7x30里的30包括3个部分,如图所示,因为有两个bbox,就有蓝绿两个了,后面20个是条件概率,比如说是物体的基础上是猫的概率,后面还要用紫色的p乘以白色的p,1x1x30是一个grid cell的参数,一共有7x7个grid cell。
这些都是预测阶段的流程。
后处理阶段
后处理就是把98个bbox最后只保留几个,
最后得到7x7x30,其中30是由5、5、20构成的,上图的这个5是第一个bbox的位置参数和置信度,20是该grid cell对类别的条件概率。
用这两个概率相乘(蓝色),得到真实的概率。
每个grid cell都能得到2个20维的全概率。
一共有98个20维。
这就是后处理阶段。
比如说第一列是各个bbox的狗的概率,第一个箭头的处理是把所有值小于0.2的变成0,然后第二个箭头是把这些按值排序,第三个箭头是做nms非极大值抑制处理。
nms的做法:把得分最大框与其余框做iou计算
如果iou大于0.5,则去掉绿框,设置为0
蓝色的框与橙色框的iou小于0.5,则保留。
然后再拿次高的蓝框和所有小于蓝框的进行iou计算
紫框和蓝框的iou大于0.5,所以把他去掉,设置为0,所以最后就保留了橙色框和蓝框两个。
最后将其可视化在目标结果上。
训练阶段(反向传播)
先人为在狗上画一个框,看这个框的中心落在哪个grid cell里,然后这个grid cell对应的两个bbox里面找一个和人为画的框的iou最大的bbox,这个bbox应该可以判断出狗的类别,而且训练尽可能逼近人为框。
这个实线框就是人为框了。最后训练就要让外围这个bbox和人为的框尽可能重合。
让和人为的框iou大的bbox去拟合,iou小的bbox就没有用了。
如果人为框的中心点没有落在这个grid cell里面,则这个grid cell的两个bbox就没用了,置信度越小越好。
损失函数一共有5个,第一个指的是负责拟合人为框的bbox的位置参数和人为框的损失值;第二个是负责拟合的bbox和人为框的宽高的损失值;第三个是负责检测的bbox的置信度损失,其中标签值为iou;第四个包括两个,一个是中心点所在的小iou的bbox对应的置信度损失,另一个是中心点不在的grid cell的两个bbox的置信度损失;第五个就说分类的类别损失。