3个与FPN结构的区别
- 没有P2层,因为这层较大,计算量大,省去之后有利于计算
- P6变成卷积不同于FPN 的最大池化
- 增加P7有利于大目标检测
下面是P3~P7预测特征层上的scales和ratios,anchor的面积=scale^2,每个位置有3*3=9个不同的anchor
上面一个网络是分类,K类,这里的K是不包括背景的。下面一个是anchor的参数,A是每个检测位置一共有几个anchor,这里不考虑这个框是属于哪一类,只看它本身的回归参数,所以不是4KA,而是4A,这样减少了计算。
关于正负样本
关于损失
α 是权重因子,一般为1.如果数据集中不同类别样本不均衡,比如数量大的类别(eg1000个)和数量小的类别(eg10个),这样用普通交叉熵模拟下来,模型更倾向于预测数量大的类别,这是因为数量大的对损失函数的贡献大。那么我们将数量少的类别α设置的更大,那就可以平衡不同类别的数量对网络造成的影响,在后续的预测中能够等概率的预测不同类别。
γ是聚焦参数,控制损失函数在难分类样本上的关注程度。将 gamma 设置为较大的值会更加强调纠正错分样本的重要性,而将其设置为零则会得到标准的交叉熵损失。
特征提取是指从原始数据中提取出具有代表性的特征,而特征融合是指将多个特征组合在一起,形成新的特征向量。这些新的特征向量既包含了原始特征的信息,又体现了它们之间的关系。总体来说,特征提取是为了从原始数据中提取出最相关的特征,而特征融合是为了将不同来源的特征结合起来。
特征提取ResNet-50 model = ResNet(num_classes, Bottleneck, [3, 4, 6, 3], **kwargs)
特征融合FPN class PyramidFeatures(nn.Module):
框回归 class RegressionModel(nn.Module):
分类子网络 class ClassificationModel(nn.Module):
总模型定义 def forward(self, inputs):
anchor生成 def forward(self, image):
损失计算