FCOS
FCOS是对于图片上的每一个像素都进行分类和预测,这也是他最大的亮点(大大增加了对图片信息的利用率,增加了正样本,同时训练也比较好显存)
与之前的cornorNet,centerNet不同他预测的是某个像素点到到他的边界框的距离,分别是l*, r*,t*, b*如下图所示
l*像素点到目标框左边界的距离 r*像素点到目标框右边界的距离 t*像素点到目标框上边界的距离 b*像素点到目标框下边界的距离
计算公式如下
网络框架
输入尺寸还是挺大的800x1024, p3, p4, p5是c3, c4, c5之后跟一个1x1卷积得到的,p6和p7是通过步长为2的卷积得到的。最大的特征图上一个格子对应原图8x8面积,最小的特征图
则对应原图128x128的面积。p3到p7每个特征都分别负责侦测不同大小的目标。对于每个特征层的上的每个输出如果max(l∗; t∗; r∗; b∗) > mi 或者max(l∗, t∗; r∗; b∗) < mi-1那么就认为
他是一个负样本。mi间接表示着每个特征层所负责侦测目标的大小。m2, m3, m4, m5, m6,m7分别是0, 64, 128, 256, 512, 无穷大。换言之就是,p2负责[0, 64], p3负责[64, 128],以此类推。。。
每个不同的特征层后都接的是同一个head那么理论上来讲不同的特征层应该采用不同的Head,所以这里FCOS采用了exp(Si*x)(Si是可以训练的)取代替exp(x)来让head变得不一样。
head之后接四层卷积,最后输出4回归目标和类别,还有一个Center-ness。类别和Center-ness是相关性比较大的,所以放在了同一个分支。
center-ness
center-ness衡量了当前像素在边界框的中心位置程度,计算公式如下:
可以看出当像素点位于目标框中心的时候,center-ness是1,越远离中心越小。FCOS通过在类别输出后面乘以预测的像素点的center-ness来削弱远离目标中心的点的类别输出,
最后经过NMS之后这些低质量的输出就被过滤掉了
损失
分类损失采用了focal loss,分类上将多个类别转化为多个二分类来处理,1{c*x,y > 0}表示只对正样本做回归损失,回归损失用iou Loss
Npos是对于所有位置的损失做归一化, numda用来调节分类与回归所占的比例