Open MLS2021 opened 1 year ago
pred_v
是Video分支的输出,算是一个网络的中间输出,训练的时候可以用来计算辅助损失。P2V默认应该就已经使用到了pred_v
哦?请问你是否改动了代码呀
pred_v
是Video分支的输出,算是一个网络的中间输出,训练的时候可以用来计算辅助损失。P2V默认应该就已经使用到了pred_v
哦?请问你是否改动了代码呀
我没有修改P2VNet的结构,由于我不清楚pred_v的作用,我就没有使用它。将这句代码: def forward(self, t1, t2, return_aux=False) 中的return_aux改为了False。 if return_aux: pred_v = self.conv_out_v(feats_v[-1]) pred_v = F.interpolate(pred_v, size=pred.shape[2:]) return pred, pred_v else: return pred 不过train函数我是用的自己的。您的意思是,如果需要使用pred_v则要调整损失函数。您看一下这个损失函数可以使用吗: class CombinedLoss_DS(nn.Module): def init(self, critn_main, critn_aux, coeff_main=1.0, coeffs_aux=1.0, main_idx=0): super().init() self.critn_main = critn_main self.critn_aux = critn_aux self.coeff_main = coeff_main self.coeffs_aux = coeffs_aux self.main_idx = main_idx
def forward(self, preds, tar, tar_aux=None):
if tar_aux is None:
tar_aux = tar
pred_main = preds[self.main_idx]
preds_aux = [pred for i, pred in enumerate(preds) if i != self.main_idx]
if isinstance(self.coeffs_aux, float):
coeffs_aux = [self.coeffs_aux]*len(preds_aux)
else:
coeffs_aux = self.coeffs_aux
if len(coeffs_aux) != len(preds_aux):
raise ValueError
loss = self.critn_main(pred_main, tar)
for coeff, pred in zip(coeffs_aux, preds_aux):
loss += coeff * self.critn_aux(pred, tar_aux)
return loss
其实不一定要用到CombinedLoss_DS
,return_aux
为True时模型会有两个输出,对他们分别都和标签计算损失,然后加权求和,就可以啦
其实不一定要用到
CombinedLoss_DS
,return_aux
为True时模型会有两个输出,对他们分别都和标签计算损失,然后加权求和,就可以啦
哦哦,对哈。多谢提醒。加权的话,是55开吗。您当初训练时,权重是多少。
其实不一定要用到
CombinedLoss_DS
,return_aux
为True时模型会有两个输出,对他们分别都和标签计算损失,然后加权求和,就可以啦哦哦,对哈。多谢提醒。加权的话,是55开吗。您当初训练时,权重是多少。
主要损失1.0,辅助损失0.4
其实不一定要用到
CombinedLoss_DS
,return_aux
为True时模型会有两个输出,对他们分别都和标签计算损失,然后加权求和,就可以啦哦哦,对哈。多谢提醒。加权的话,是55开吗。您当初训练时,权重是多少。
主要损失1.0,辅助损失0.4
好的,非常感谢您的指导。
您好,作为变化检测的初学者,在阅读和运行了您的代码之后,有个问题需要向您请教: if return_aux: pred_v = self.conv_out_v(feats_v[-1]) pred_v = F.interpolate(pred_v, size=pred.shape[2:]) return pred, pred_v else: return pred 如果 return_aux = True ,返回的就是一个turple。我直接开始训练的话就会报错: if not (target.size() == input.size()): AttributeError: 'tuple' object has no attribute 'size' 这个错误出现在: loss = criterion(result, gt), 在计算损失函数的时候, 如果return_aux = False,则不会报错。 想请问一下,如果这个pred_v的作用是什么,如果我需要使用pred_v,我该怎么编写损失函数。