def compute_loss_and_metrics()

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,
        )