{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Expected Loss: Inaccuracy from Rasterization\n\nAs we are using a rasterizer in most public Notebooks right now, I want to stress the importance of the raster size w.r.t. the expected loss that originates from the rasterization inaccuracy.\n\nEach history position, each lane, each other agent is encoded into a pixels and our net is only able to predict the next positions on the map with pixel accuracy. \nIn many notebooks, the raster has a size of 0.50 m per pixel (hyperparameter). Thus, the expected mean error will be a 0.50 / 4 for each direction for each predicted position.\n\nIn the following I will calculate the resulting error in the given metric.\n\n![expected_error.PNG](attachment:expected_error.PNG)\n![legend.PNG](attachment:legend.PNG)","attachments":{"expected_error.PNG":{"image/png":"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"},"legend.PNG":{"image/png":"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"}}},{"metadata":{"_kg_hide-input":true,"_kg_hide-output":true,"trusted":true},"cell_type":"code","source":"# Original code from https://github.com/lyft/l5kit/blob/20ab033c01610d711c3d36e1963ecec86e8b85b6/l5kit/l5kit/evaluation/metrics.py\n# Thanks for the additions from here: https://www.kaggle.com/corochann/lyft-training-with-multi-mode-confidence\nimport numpy as np\nimport torch\nfrom torch import Tensor\n\n\ndef pytorch_neg_multi_log_likelihood(gt: Tensor, pred: Tensor, confidences: Tensor, avails: Tensor) -> Tensor:\n    \"\"\"\n    Compute a negative log-likelihood for the multi-modal scenario.\n    log-sum-exp trick is used here to avoid underflow and overflow, For more information about it see:\n    https://en.wikipedia.org/wiki/LogSumExp#log-sum-exp_trick_for_log-domain_calculations\n    https://timvieira.github.io/blog/post/2014/02/11/exp-normalize-trick/\n    https://leimao.github.io/blog/LogSumExp/\n    Args:\n        gt (Tensor): array of shape (time)x(2D coords)\n        pred (Tensor): array of shape (modes)x(time)x(2D coords)\n        confidences (Tensor): array of shape (modes) with a confidence for each mode in each sample\n        avails (Tensor): array of shape (time) with the availability for each gt timestep\n    Returns:\n        Tensor: negative log-likelihood for this example, a single float number\n    \"\"\"\n    assert len(pred.shape) == 3, f\"expected 3D (MxTxC) array for pred, got {pred.shape}\"\n    num_modes, future_len, num_coords = pred.shape\n\n    assert gt.shape == (future_len, num_coords), f\"expected 2D (Time x Coords) array for gt, got {gt.shape}\"\n    assert confidences.shape == (num_modes,), f\"expected 1D (Modes) array for gt, got {confidences.shape}\"\n    assert abs(torch.sum(confidences).item() - 1.0) < 1e-6, \"confidences should sum to 1\"\n    assert avails.shape == (future_len,), f\"expected 1D (Time) array for gt, got {avails.shape}\"\n    # assert all data are valid\n    assert torch.isfinite(pred).all(), \"invalid value found in pred\"\n    assert torch.isfinite(gt).all(), \"invalid value found in gt\"\n    assert torch.isfinite(confidences).all(), \"invalid value found in confidences\"\n    assert torch.isfinite(avails).all(), \"invalid value found in avails\"\n\n    gt = torch.unsqueeze(gt, 0)  # add modes\n    avails = avails[None, :, None]  # add modes and cords\n\n    error = torch.sum(((gt - pred) * avails) ** 2, dim=-1)  # reduce coords and use availability\n\n    with np.errstate(divide=\"ignore\"):  # when confidence is 0 log goes to -inf, but we're fine with it\n        error = torch.log(confidences) - 0.5 * torch.sum(error, dim=-1)  # reduce time\n\n    # use max aggregator on modes for numerical stability\n    max_value = error.max()  # error are negative at this point, so max() gives the minimum one\n    error = -torch.log(torch.sum(torch.exp(error - max_value), dim=-1)) - max_value  # reduce modes\n    return error\n\n\ndef pytorch_neg_multi_log_likelihood_batch(\n    gt: Tensor, pred: Tensor, confidences: Tensor, avails: Tensor\n) -> Tensor:\n    \"\"\"\n    Compute a negative log-likelihood for the multi-modal scenario.\n    log-sum-exp trick is used here to avoid underflow and overflow, For more information about it see:\n    https://en.wikipedia.org/wiki/LogSumExp#log-sum-exp_trick_for_log-domain_calculations\n    https://timvieira.github.io/blog/post/2014/02/11/exp-normalize-trick/\n    https://leimao.github.io/blog/LogSumExp/\n    Args:\n        gt (Tensor): array of shape (bs)x(time)x(2D coords)\n        pred (Tensor): array of shape (bs)x(modes)x(time)x(2D coords)\n        confidences (Tensor): array of shape (bs)x(modes) with a confidence for each mode in each sample\n        avails (Tensor): array of shape (bs)x(time) with the availability for each gt timestep\n    Returns:\n        Tensor: negative log-likelihood for this example, a single float number\n    \"\"\"\n    assert len(pred.shape) == 4, f\"expected 3D (MxTxC) array for pred, got {pred.shape}\"\n    batch_size, num_modes, future_len, num_coords = pred.shape\n\n    assert gt.shape == (batch_size, future_len, num_coords), f\"expected 2D (Time x Coords) array for gt, got {gt.shape}\"\n    assert confidences.shape == (batch_size, num_modes), f\"expected 1D (Modes) array for gt, got {confidences.shape}\"\n    assert torch.allclose(torch.sum(confidences, dim=1), confidences.new_ones((batch_size,))), \"confidences should sum to 1\"\n    assert avails.shape == (batch_size, future_len), f\"expected 1D (Time) array for gt, got {avails.shape}\"\n    # assert all data are valid\n    assert torch.isfinite(pred).all(), \"invalid value found in pred\"\n    assert torch.isfinite(gt).all(), \"invalid value found in gt\"\n    assert torch.isfinite(confidences).all(), \"invalid value found in confidences\"\n    assert torch.isfinite(avails).all(), \"invalid value found in avails\"\n\n    # convert to (batch_size, num_modes, future_len, num_coords)\n    gt = torch.unsqueeze(gt, 1)  # add modes\n    avails = avails[:, None, :, None]  # add modes and cords\n\n    # error (batch_size, num_modes, future_len)\n    error = torch.sum(((gt - pred) * avails) ** 2, dim=-1)  # reduce coords and use availability\n\n    with np.errstate(divide=\"ignore\"):  # when confidence is 0 log goes to -inf, but we're fine with it\n        # error (batch_size, num_modes)\n        error = torch.log(confidences) - 0.5 * torch.sum(error, dim=-1)  # reduce time\n\n    # use max aggregator on modes for numerical stability\n    # error (batch_size, num_modes)\n    max_value, _ = error.max(dim=1, keepdim=True)  # error are negative at this point, so max() gives the minimum one\n    error = -torch.log(torch.sum(torch.exp(error - max_value), dim=-1, keepdim=True)) - max_value  # reduce modes\n    # print(\"error\", error)\n    return torch.mean(error)\n\n\ndef pytorch_neg_multi_log_likelihood_single(\n    gt: Tensor, pred: Tensor, avails: Tensor\n) -> Tensor:\n    \"\"\"\n\n    Args:\n        gt (Tensor): array of shape (bs)x(time)x(2D coords)\n        pred (Tensor): array of shape (bs)x(time)x(2D coords)\n        avails (Tensor): array of shape (bs)x(time) with the availability for each gt timestep\n    Returns:\n        Tensor: negative log-likelihood for this example, a single float number\n    \"\"\"\n    # pred (bs)x(time)x(2D coords) --> (bs)x(mode=1)x(time)x(2D coords)\n    # create confidence (bs)x(mode=1)\n    batch_size, future_len, num_coords = pred.shape\n    confidences = pred.new_ones((batch_size, 1))\n    return pytorch_neg_multi_log_likelihood_batch(gt, pred.unsqueeze(1), confidences, avails)\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom torch import Tensor\n\n# 'pixel_size': [0.50, 0.50],\n# so we must accept an error of up to 0.25 meter, mean error is 0.50 m / 4\n\nsubmission = pd.read_csv(\"/kaggle/input/lyft-motion-prediction-autonomous-vehicles/single_mode_sample_submission.csv\")\n\ngt = Tensor(submission.iloc[0, 5:105].to_numpy().reshape((-1, 2)))\npred = Tensor(submission.iloc[0, 5:105].to_numpy().reshape((-1, 2)))\navails = Tensor(np.ones((50)))\n\ngt = gt.unsqueeze(0)\npred = pred.unsqueeze(0)\navails = avails.unsqueeze(0)\n\npred += (0.50 / 4)\n\nnll = pytorch_neg_multi_log_likelihood_single(gt, pred, avails)\nprint(f'Additional Expected Error for pixel_size = 0.50 (nll metric): {nll.item()}')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Seems like we have to expect, that 0.78125 of our metric is actually just the inaccuracy from the rasterizer"},{"metadata":{"trusted":true},"cell_type":"code","source":"gt = Tensor(submission.iloc[0, 5:105].to_numpy().reshape((-1, 2)))\npred = Tensor(submission.iloc[0, 5:105].to_numpy().reshape((-1, 2)))\navails = Tensor(np.ones((50)))\n\ngt = gt.unsqueeze(0)\npred = pred.unsqueeze(0)\navails = avails.unsqueeze(0)\n\npred += (0.25 / 4)\n\nnll = pytorch_neg_multi_log_likelihood_single(gt, pred, avails)\nprint(f'Additional Expected Error for pixel_size = 0.25 (nll metric): {nll.item()}')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### We can reduce that value to 0.1953125 by creating a smaller grid (e.g. pixel_size = 0.25). Keep in mind, that you would need to double the raster_size to see the same region of the map."},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}