in projects/deep_video_compression/dvc_module.py [0:0]
def compute_loss_and_metrics(self, loss_values, current_metrics):
# loss function collection
combined_bpp = 0
loss = loss_values.distortion_loss
gop_distortion_loss = (
current_metrics.gop_distortion_loss + loss_values.distortion_loss.detach()
)
if loss_values.flow_entropy_loss is not None:
loss = loss + loss_values.flow_entropy_loss
combined_bpp = combined_bpp + loss_values.flow_entropy_loss.detach()
gop_flow_bpp: Optional[Tensor] = (
current_metrics.gop_flow_bpp + loss_values.flow_entropy_loss.detach()
)
else:
gop_flow_bpp = None
if loss_values.resid_entropy_loss is not None:
loss = loss + loss_values.resid_entropy_loss
combined_bpp = combined_bpp + loss_values.resid_entropy_loss.detach()
gop_residual_bpp: Optional[Tensor] = (
current_metrics.gop_residual_bpp
+ loss_values.resid_entropy_loss.detach()
)
else:
gop_residual_bpp = None
gop_total_loss = current_metrics.gop_total_loss + loss.detach()
gop_bpp = current_metrics.gop_bpp + combined_bpp
return loss, LoggingMetrics(
gop_total_loss=gop_total_loss,
gop_distortion_loss=gop_distortion_loss,
gop_bpp=gop_bpp,
gop_flow_bpp=gop_flow_bpp,
gop_residual_bpp=gop_residual_bpp,
)