关于Yet-Another-EfficientDet-Pytorch 的输出,loss分析

羊渝
2023-12-01

链接: https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch.

features, regressions, classifications, anchors = model(imgs)

第一个输出features,
代入第二,三,四个输出相关的函数中,相当于第二阶网络,
得到第二,三,四个输出

regressions= self.regressor(features)
classifications= self.classifer(features)
anchors = self.anchors (imgs)

.
其中features没有用在loss 函数里,同时features是efficientdet骨干网络(主网络)输出的feature
但features合并了3个level层的feature

.
regressions 是features 作为输入的一个网络(第二阶网络)的输出,相当于做卷积运算
(每层都输出 [x,y,height,width],3层合并),
shape (batch_size, 10000+ ,4)

.
classification 是features 作为输入的一个网络(第二阶网络)的输出,相当于做卷积运算
(每层都输出 [one-hot] 类别的矩阵,3层合并)
shape (batch_size, 10000+ ,num_class)

bce = -(targets * torch.log(classification) + (1.0 - targets) * torch.log(1.0 - classification))
cls_loss = focal_weight * bce

分类损失,用的是binary-cross-entropy loss,并且前置系数(focalloss)
计算过程(个人观点):
1.如80分类,每一类:是与不是的概率求log,并于target系数相乘(target系数只有0,1两种情况),
2.得到一个长度80的输出,和focal_weight 系数相乘(focal_weight可查看focalloss相关讲解,论文。我的理解是,不同类别根据识别的难易程度,设置不同权重)
3.最终的长度80的输出,求均值或求和,得到分类损失

.
anchors 用于 和target的标注的联合计算,进行自适应变换,
变换成对应regressions 的尺寸大小(对应3个level)的 size,
好跟regressions 计算求loss(focalloss。。。带系数的cross entropy loss),得到边框回归损失
shape (batch_size, 10000+ ,4)

 类似资料: