问题
1.正负样例不均匀是什么?
2.当识别一副图片时,one stage 会生成大量的anchor(候选框)代码中在哪里体现的?
正负样例不均匀是什么?
在机器学习任务中,我们经常会遇到这种困扰,数据不均衡问题,以总体分类准确率为学习目标的传统分类算法会过多地关注多数类,从而使得少数类样本的分类性能下降.
解决方法:
1.重新采样训练集
可以使用不同的数据集,有两种方法使不平衡的数据集来建立一个平衡的数据集---欠采样和过采样
1.1 欠采样
欠采样是通过减少丰富类的大小来平衡数据集,当数据量足够时就该采用此方法,通过保存所有稀有类样本呢,并在丰富类别中随机选择与稀有类别样本相等数量的样本
1.2 过采样
相反,当数据量不足时就应该使用过采样,它尝试通过增加稀有样本的数量来平衡数据集,而不是去除丰富类别的样本的数量,通过使用重复,自举或合成少数类过采样等方法来生成新的稀有样品.
作为one stage的网络,正负样例不均匀对于网络精度的潜在影响一直不可忽视,举个简单的例子说明一下,当识别一副图片时,one stage 会生成大量的anchor(候选框)当识别一副图片时,one stage 会生成大量的anchor(候选框),这其中只有少数是正例(物体),大部分的候选框只是框住了背景,在计算损失的时候,网络的loss会被大量的负例(背景)左右,two stage的网络在这方面会做的好一些,因为他们在一开始将anchors做二分类,这等于做了一个初筛,这样一来就降低了正负样本分布不均匀的情况.
retinanet通过改变分类损失计算公式,很大程度上解决了分布不均匀带来的影响,计算公式如下
为什呢?让我们从头说起,二分类误差一般采用交叉熵cross entropy(CE),
一个常用的平衡类别不均的方法是加上一个权重(范围在0,1])
focal loss就是再加上一个权重
为什么加上一个权重就能发挥如此大的作用,可以举一个例子说明,假设,前景的概率是p=0.9,那么交叉熵是
损失变成了原来的.....这一段没看懂
网络结构
这么强大的性能,网络结构却十分简单,可以归纳为:resnet(backbone)+FPN+FCN
图像经过resnet主干网络,每经过一个res_block,图像的size都要缩小一半
retinanet选取最后的层构建anchors, 我们可以给它们命名为[C3,C4,C5,P6,P7]
这个时候FPN登场,通过结合多层的特征信息,网络能够更好的处理小目标,同时融合了深层语义信息和浅层的图片细节(局部特征,目标定位等)信息,网络的准确性得到进一步提升.
C3,C4,C5都经过一个卷积层后得到了p3,p4,p5,然后我们将每个金子塔(p3-7)都接上输出,再将他们都连接起来就得到了最终的结果,每一层的输出如下