{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Goal of this notebook: implement some basic RNN/LSTM/GRU to _forecast_ trajectories based on VIRAT and/or the custom _hof_ dataset." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/ruben/suspicion/trap/.venv/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n" ] } ], "source": [ "import numpy as np\n", "import torch\n", "import matplotlib.pyplot as plt # Visualization \n", "import torch.nn as nn\n", "import pandas_helper_calc # noqa # provides df.calc.derivative()\n", "import pandas as pd\n", "import cv2\n", "import pathlib\n", "from tqdm.autonotebook import tqdm" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "FPS = 12\n", "# SRC_CSV = \"EXPERIMENTS/hofext-maskrcnn/all.txt\"\n", "# SRC_CSV = \"EXPERIMENTS/raw/generated/train/tracks.txt\"\n", "SRC_CSV = \"EXPERIMENTS/raw/hof-meter-maskrcnn2/train/tracks.txt\"\n", "SRC_CSV = \"EXPERIMENTS/20240426-hof-yolo/train/tracked.txt\"\n", "SRC_CSV = \"EXPERIMENTS/raw/hof2/train/tracked.txt\"\n", "# SRC_H = \"../DATASETS/hof/webcam20231103-2-homography.txt\"\n", "SRC_H = None\n", "CACHE_DIR = \"EXPERIMENTS/cache/hof2/\"\n", "SMOOTHING = True # hof-yolo is already smoothed, hof2 isn't\n", "SMOOTHING_WINDOW=3 #2" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "in_fields = ['proj_x', 'proj_y', 'vx', 'vy', 'ax', 'ay']\n", "# out_fields = ['v', 'heading']\n", "# velocity cannot be negative, and heading is circular (modulo), this makes it harder to optimise than a linear space, so try to use components\n", "# an we can use simple MSE loss (I guess?)\n", "out_fields = ['vx', 'vy']\n", "window = int(FPS*1.5)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cuda\n" ] } ], "source": [ "# Set device\n", "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", "print(device)\n", "\n", "# Hyperparameters\n", "input_size = len(in_fields)\n", "hidden_size = 256\n", "num_layers = 3\n", "output_size = len(out_fields)\n", "learning_rate = 0.005 #0.01 #0.005\n", "batch_size = 256\n", "num_epochs = 1000" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "cache_path = pathlib.Path(CACHE_DIR)\n", "cache_path.mkdir(parents=True, exist_ok=True)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Samping 1/5, of 412098 items\n", "Done sampling kept 83726 items\n" ] } ], "source": [ "from pathlib import Path\n", "from trap.tools import load_tracks_from_csv\n", "\n", "data = load_tracks_from_csv(Path(SRC_CSV), FPS, 2, 5 )" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
frame_idtrack_idltwhxystatediff...dxdyvxvyaxayvaheadingd_heading
194606.041593.885864782.814819145.704346195.38043212.89783010.7500612.0NaN...0.201965-0.2913500.484716-0.699240-1.622919-1.7321440.8508151.399195304.729842-101.772559
199611.041563.890015700.710510137.461304190.19485513.09979410.4587121.05.0...0.201965-0.2913500.484716-0.699240-1.622919-1.7321440.8508151.399195304.729842-101.772559
204616.041529.469727635.622498129.342651194.19152813.0200029.8666422.05.0...-0.079792-0.592069-0.191501-1.420966-1.622919-1.7321441.4338121.399195262.324609-101.772559
209621.041474.449341569.387634128.099854199.76635712.9657769.3014422.05.0...-0.054226-0.565200-0.130143-1.3564790.1472590.1547691.362708-0.170650264.5197155.268254
214626.041443.123535518.907043120.022461202.56677212.6429928.9766242.05.0...-0.322784-0.324818-0.774681-0.779564-1.5468921.3845971.099023-0.632844225.179993-94.415332
219631.041398.944946461.813049106.391357193.47641012.4655888.5577882.05.0...-0.177404-0.418836-0.425771-1.0052050.837386-0.5415391.091659-0.017675247.04414852.473972
224636.041353.237793438.11889691.444336170.93066412.1284338.0523232.05.0...-0.337155-0.505465-0.809172-1.213117-0.920163-0.4989871.4582220.879752236.295957-25.795658
229641.041272.791992408.827759104.274536180.41455111.6896487.6846362.05.0...-0.438785-0.367687-1.053084-0.882448-0.5853880.7936041.373936-0.202286219.961870-39.201809
234646.041198.965820407.952759103.282104167.30658011.2072767.4762162.05.0...-0.482372-0.208420-1.157693-0.500209-0.2510640.9173741.261136-0.270721203.367915-39.825493
239651.041156.309570415.74340897.628784158.77481110.8841547.5146922.05.0...-0.3231220.038476-0.7754930.0923430.9172821.4221250.780971-1.152395173.209381-72.380481
244656.041094.440430443.849915107.938110177.70397910.5444927.8700902.05.0...-0.3396610.355398-0.8151870.852955-0.0952671.8254681.1798570.957326133.703018-94.815270
249661.041072.595093481.461945118.452148205.36517310.4865048.2877582.05.0...-0.0579890.417668-0.1391731.0024041.6224350.3586781.012019-0.40281197.904355-85.916792
254666.041086.627930526.733154105.444458189.75061010.4983938.6840432.05.0...0.0118890.3962850.0285340.9510830.402496-0.1231700.951511-0.14522088.281546-23.094741
259671.041099.592285584.216675114.395874218.00347910.4927679.2671062.05.0...-0.0056260.583063-0.0135021.399352-0.1008871.0758451.3994171.07497590.5528155.451045
264676.041144.484782642.77958296.750326180.74469010.4846919.5827451.05.0...-0.0080770.315639-0.0193840.757534-0.014116-1.5403640.757782-1.53992591.4657532.191052
269681.041179.532959682.365540107.764282200.65173310.6983739.9505162.05.0...0.2136820.3677710.5128370.8826501.2773310.3002781.0208200.63129159.842534-75.895726
\n", "

16 rows × 24 columns

\n", "
" ], "text/plain": [ " frame_id track_id l t w h \\\n", "194 606.0 4 1593.885864 782.814819 145.704346 195.380432 \n", "199 611.0 4 1563.890015 700.710510 137.461304 190.194855 \n", "204 616.0 4 1529.469727 635.622498 129.342651 194.191528 \n", "209 621.0 4 1474.449341 569.387634 128.099854 199.766357 \n", "214 626.0 4 1443.123535 518.907043 120.022461 202.566772 \n", "219 631.0 4 1398.944946 461.813049 106.391357 193.476410 \n", "224 636.0 4 1353.237793 438.118896 91.444336 170.930664 \n", "229 641.0 4 1272.791992 408.827759 104.274536 180.414551 \n", "234 646.0 4 1198.965820 407.952759 103.282104 167.306580 \n", "239 651.0 4 1156.309570 415.743408 97.628784 158.774811 \n", "244 656.0 4 1094.440430 443.849915 107.938110 177.703979 \n", "249 661.0 4 1072.595093 481.461945 118.452148 205.365173 \n", "254 666.0 4 1086.627930 526.733154 105.444458 189.750610 \n", "259 671.0 4 1099.592285 584.216675 114.395874 218.003479 \n", "264 676.0 4 1144.484782 642.779582 96.750326 180.744690 \n", "269 681.0 4 1179.532959 682.365540 107.764282 200.651733 \n", "\n", " x y state diff ... dx dy vx \\\n", "194 12.897830 10.750061 2.0 NaN ... 0.201965 -0.291350 0.484716 \n", "199 13.099794 10.458712 1.0 5.0 ... 0.201965 -0.291350 0.484716 \n", "204 13.020002 9.866642 2.0 5.0 ... -0.079792 -0.592069 -0.191501 \n", "209 12.965776 9.301442 2.0 5.0 ... -0.054226 -0.565200 -0.130143 \n", "214 12.642992 8.976624 2.0 5.0 ... -0.322784 -0.324818 -0.774681 \n", "219 12.465588 8.557788 2.0 5.0 ... -0.177404 -0.418836 -0.425771 \n", "224 12.128433 8.052323 2.0 5.0 ... -0.337155 -0.505465 -0.809172 \n", "229 11.689648 7.684636 2.0 5.0 ... -0.438785 -0.367687 -1.053084 \n", "234 11.207276 7.476216 2.0 5.0 ... -0.482372 -0.208420 -1.157693 \n", "239 10.884154 7.514692 2.0 5.0 ... -0.323122 0.038476 -0.775493 \n", "244 10.544492 7.870090 2.0 5.0 ... -0.339661 0.355398 -0.815187 \n", "249 10.486504 8.287758 2.0 5.0 ... -0.057989 0.417668 -0.139173 \n", "254 10.498393 8.684043 2.0 5.0 ... 0.011889 0.396285 0.028534 \n", "259 10.492767 9.267106 2.0 5.0 ... -0.005626 0.583063 -0.013502 \n", "264 10.484691 9.582745 1.0 5.0 ... -0.008077 0.315639 -0.019384 \n", "269 10.698373 9.950516 2.0 5.0 ... 0.213682 0.367771 0.512837 \n", "\n", " vy ax ay v a heading d_heading \n", "194 -0.699240 -1.622919 -1.732144 0.850815 1.399195 304.729842 -101.772559 \n", "199 -0.699240 -1.622919 -1.732144 0.850815 1.399195 304.729842 -101.772559 \n", "204 -1.420966 -1.622919 -1.732144 1.433812 1.399195 262.324609 -101.772559 \n", "209 -1.356479 0.147259 0.154769 1.362708 -0.170650 264.519715 5.268254 \n", "214 -0.779564 -1.546892 1.384597 1.099023 -0.632844 225.179993 -94.415332 \n", "219 -1.005205 0.837386 -0.541539 1.091659 -0.017675 247.044148 52.473972 \n", "224 -1.213117 -0.920163 -0.498987 1.458222 0.879752 236.295957 -25.795658 \n", "229 -0.882448 -0.585388 0.793604 1.373936 -0.202286 219.961870 -39.201809 \n", "234 -0.500209 -0.251064 0.917374 1.261136 -0.270721 203.367915 -39.825493 \n", "239 0.092343 0.917282 1.422125 0.780971 -1.152395 173.209381 -72.380481 \n", "244 0.852955 -0.095267 1.825468 1.179857 0.957326 133.703018 -94.815270 \n", "249 1.002404 1.622435 0.358678 1.012019 -0.402811 97.904355 -85.916792 \n", "254 0.951083 0.402496 -0.123170 0.951511 -0.145220 88.281546 -23.094741 \n", "259 1.399352 -0.100887 1.075845 1.399417 1.074975 90.552815 5.451045 \n", "264 0.757534 -0.014116 -1.540364 0.757782 -1.539925 91.465753 2.191052 \n", "269 0.882650 1.277331 0.300278 1.020820 0.631291 59.842534 -75.895726 \n", "\n", "[16 rows x 24 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ltwhxystate
track_idframe_id
13421393.7365720.00000067.613647121.3911511363.3164232.926472
3431391.7758790.85237178.562622141.0509341359.1885266.065862
3461392.1645517.75898785.757324154.3579711355.7444297.674042
3471393.84484912.69123886.482910156.2647861355.2312308.206702
3481394.83911115.62133884.763428154.5843961354.9246310.092252
...........................
5030326911708.213379749.260376133.839966182.4053961402.54261075.208702
326921707.651855748.997437134.013672182.3912961402.29481074.972302
327201700.379639750.314697128.792603181.5897831395.79921074.273202
327211701.722412751.000488125.286865180.8676151395.54241074.205602
327221702.384766750.754517123.435425180.9456181395.40821074.065002
\n", "

326960 rows × 7 columns

\n", "
" ], "text/plain": [ " l t w h x \\\n", "track_id frame_id \n", "1 342 1393.736572 0.000000 67.613647 121.391151 1363.3164 \n", " 343 1391.775879 0.852371 78.562622 141.050934 1359.1885 \n", " 346 1392.164551 7.758987 85.757324 154.357971 1355.7444 \n", " 347 1393.844849 12.691238 86.482910 156.264786 1355.2312 \n", " 348 1394.839111 15.621338 84.763428 154.584396 1354.9246 \n", "... ... ... ... ... ... \n", "5030 32691 1708.213379 749.260376 133.839966 182.405396 1402.5426 \n", " 32692 1707.651855 748.997437 134.013672 182.391296 1402.2948 \n", " 32720 1700.379639 750.314697 128.792603 181.589783 1395.7992 \n", " 32721 1701.722412 751.000488 125.286865 180.867615 1395.5424 \n", " 32722 1702.384766 750.754517 123.435425 180.945618 1395.4082 \n", "\n", " y state \n", "track_id frame_id \n", "1 342 232.92647 2 \n", " 343 266.06586 2 \n", " 346 297.67404 2 \n", " 347 308.20670 2 \n", " 348 310.09225 2 \n", "... ... ... \n", "5030 32691 1075.20870 2 \n", " 32692 1074.97230 2 \n", " 32720 1074.27320 2 \n", " 32721 1074.20560 2 \n", " 32722 1074.06500 2 \n", "\n", "[326960 rows x 7 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = pd.read_csv(SRC_CSV, delimiter=\"\\t\", index_col=False, header=None)\n", "# data.columns = ['frame_id', 'track_id', 'pos_x', 'pos_y', 'width', 'height']#, '_x', '_y,']\n", "data.columns = ['frame_id', 'track_id', 'l', 't', 'w', 'h', 'x', 'y', 'state']#, '_x', '_y,']\n", "data['frame_id'] = pd.to_numeric(data['frame_id'], downcast='integer')\n", "data['frame_id'] = data['frame_id'] // 10 # compatibility with Trajectron++\n", "\n", "data.sort_values(by=['track_id', 'frame_id'],inplace=True)\n", "\n", "data.set_index(['track_id', 'frame_id'])" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# cm to meter\n", "data['x'] = data['x']/100\n", "data['y'] = data['y']/100" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "data['diff'] = data.groupby(['track_id'])['frame_id'].diff() #.fillna(0)\n", "data['diff'] = pd.to_numeric(data['diff'], downcast='integer')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "326960it [06:37, 821.55it/s] " ] }, { "name": "stdout", "output_type": "stream", "text": [ "was: 326960 added: 85138 new length: 412098\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "missing=0\n", "old_size=len(data)\n", "# slow way to append missing steps to the dataset\n", "for ind, row in tqdm(data.iterrows()):\n", " if row['diff'] > 1:\n", " for s in range(1, int(row['diff'])):\n", " # add as many entries as missing\n", " missing += 1\n", " data.loc[len(data)] = [row['frame_id']-s, row['track_id'], np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 1, 1]\n", " # new_frame = [data.loc[ind-1]['frame_id']+s, row['track_id'], np.nan, np.nan, np.nan, np.nan, np.nan]\n", " # data.loc[len(data)] = new_frame\n", "\n", "print('was:', old_size, 'added:', missing, 'new length:', len(data))\n", "# now sort, so that the added data is in the right place\n", "data.sort_values(by=['track_id', 'frame_id'], inplace=True)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# interpolate missing data\n", "df=data.copy()\n", "df = df.groupby('track_id').apply(lambda group: group.interpolate(method='linear'))\n", "df.reset_index(drop=True, inplace=True)\n", "data = df\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running smoother\n" ] } ], "source": [ "from trap.tracker import Smoother\n", "\n", "if SMOOTHING:\n", " df=data.copy()\n", " if 'x_raw' not in df:\n", " df['x_raw'] = df['x']\n", " if 'y_raw' not in df:\n", " df['y_raw'] = df['y']\n", "\n", " print(\"Running smoother\")\n", " # print(df)\n", " # from tsmoothie.smoother import KalmanSmoother, ConvolutionSmoother\n", " smoother = Smoother(convolution=False)\n", " def smoothing(data):\n", " # smoother = ConvolutionSmoother(window_len=SMOOTHING_WINDOW, window_type='ones', copy=None)\n", " return smoother.smooth(data).tolist()\n", " # df=df.assign(smooth_data=smoother.smooth_data[0])\n", " # return smoother.smooth_data[0].tolist()\n", "\n", " # operate smoothing per axis\n", " df['x'] = df.groupby('track_id')['x_raw'].transform(smoothing)\n", " df['y'] = df.groupby('track_id')['y_raw'].transform(smoothing)\n", " \n", "\n", " data = df\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
frame_idtrack_idltwhxystatediffx_rawy_raw
09.01.00.000000565.56616288.795326173.9175420.8551007.1361932.0NaN0.8815957.341152
110.01.00.000000565.11669988.801704171.3342900.8731327.2352332.01.00.8707037.309168
211.01.00.000000564.87457390.596596177.1999510.8909577.3289892.01.00.9013747.370044
312.01.00.000000564.87426890.928131183.1257320.9077847.4181872.01.00.9243607.432365
413.01.00.000000569.93121386.213280180.7742920.9234397.5050122.01.00.9065837.456334
.......................................
32018360159.03632.01830.709717651.257446150.202515157.23974614.8404769.7865012.0NaN15.21455110.027093
32018460160.03632.01834.013672649.612122153.686646160.87402315.0334329.8704722.01.015.24487210.047117
32018560161.03632.01845.373047651.249756147.178589153.72924815.2115609.9432362.01.015.31849610.015218
32018660162.03632.01857.388916650.908203136.407349142.35461415.37767310.0089652.01.015.4002039.935355
32018760163.03632.01862.792725658.719971141.984253149.05230715.53825510.0759352.01.015.41689310.051785
\n", "

320188 rows × 12 columns

\n", "
" ], "text/plain": [ " frame_id track_id l t w h \\\n", "0 9.0 1.0 0.000000 565.566162 88.795326 173.917542 \n", "1 10.0 1.0 0.000000 565.116699 88.801704 171.334290 \n", "2 11.0 1.0 0.000000 564.874573 90.596596 177.199951 \n", "3 12.0 1.0 0.000000 564.874268 90.928131 183.125732 \n", "4 13.0 1.0 0.000000 569.931213 86.213280 180.774292 \n", "... ... ... ... ... ... ... \n", "320183 60159.0 3632.0 1830.709717 651.257446 150.202515 157.239746 \n", "320184 60160.0 3632.0 1834.013672 649.612122 153.686646 160.874023 \n", "320185 60161.0 3632.0 1845.373047 651.249756 147.178589 153.729248 \n", "320186 60162.0 3632.0 1857.388916 650.908203 136.407349 142.354614 \n", "320187 60163.0 3632.0 1862.792725 658.719971 141.984253 149.052307 \n", "\n", " x y state diff x_raw y_raw \n", "0 0.855100 7.136193 2.0 NaN 0.881595 7.341152 \n", "1 0.873132 7.235233 2.0 1.0 0.870703 7.309168 \n", "2 0.890957 7.328989 2.0 1.0 0.901374 7.370044 \n", "3 0.907784 7.418187 2.0 1.0 0.924360 7.432365 \n", "4 0.923439 7.505012 2.0 1.0 0.906583 7.456334 \n", "... ... ... ... ... ... ... \n", "320183 14.840476 9.786501 2.0 NaN 15.214551 10.027093 \n", "320184 15.033432 9.870472 2.0 1.0 15.244872 10.047117 \n", "320185 15.211560 9.943236 2.0 1.0 15.318496 10.015218 \n", "320186 15.377673 10.008965 2.0 1.0 15.400203 9.935355 \n", "320187 15.538255 10.075935 2.0 1.0 15.416893 10.051785 \n", "\n", "[320188 rows x 12 columns]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# del data['diff']\n", "# recalculate diff\n", "data['diff'] = data.groupby(['track_id'])['frame_id'].diff()\n", "data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
frame_idtrack_idltwhxystatediffx_rawy_rawdt
09.010.000000565.56616288.795326173.9175420.8551007.1361932.0NaN0.8815957.341152NaN
110.010.000000565.11669988.801704171.3342900.8731327.2352332.01.00.8707037.3091680.083333
211.010.000000564.87457390.596596177.1999510.8909577.3289892.01.00.9013747.3700440.083333
312.010.000000564.87426890.928131183.1257320.9077847.4181872.01.00.9243607.4323650.083333
413.010.000000569.93121386.213280180.7742920.9234397.5050122.01.00.9065837.4563340.083333
..........................................
32018360159.036321830.709717651.257446150.202515157.23974614.8404769.7865012.0NaN15.21455110.027093NaN
32018460160.036321834.013672649.612122153.686646160.87402315.0334329.8704722.01.015.24487210.0471170.083333
32018560161.036321845.373047651.249756147.178589153.72924815.2115609.9432362.01.015.31849610.0152180.083333
32018660162.036321857.388916650.908203136.407349142.35461415.37767310.0089652.01.015.4002039.9353550.083333
32018760163.036321862.792725658.719971141.984253149.05230715.53825510.0759352.01.015.41689310.0517850.083333
\n", "

320188 rows × 13 columns

\n", "
" ], "text/plain": [ " frame_id track_id l t w h \\\n", "0 9.0 1 0.000000 565.566162 88.795326 173.917542 \n", "1 10.0 1 0.000000 565.116699 88.801704 171.334290 \n", "2 11.0 1 0.000000 564.874573 90.596596 177.199951 \n", "3 12.0 1 0.000000 564.874268 90.928131 183.125732 \n", "4 13.0 1 0.000000 569.931213 86.213280 180.774292 \n", "... ... ... ... ... ... ... \n", "320183 60159.0 3632 1830.709717 651.257446 150.202515 157.239746 \n", "320184 60160.0 3632 1834.013672 649.612122 153.686646 160.874023 \n", "320185 60161.0 3632 1845.373047 651.249756 147.178589 153.729248 \n", "320186 60162.0 3632 1857.388916 650.908203 136.407349 142.354614 \n", "320187 60163.0 3632 1862.792725 658.719971 141.984253 149.052307 \n", "\n", " x y state diff x_raw y_raw dt \n", "0 0.855100 7.136193 2.0 NaN 0.881595 7.341152 NaN \n", "1 0.873132 7.235233 2.0 1.0 0.870703 7.309168 0.083333 \n", "2 0.890957 7.328989 2.0 1.0 0.901374 7.370044 0.083333 \n", "3 0.907784 7.418187 2.0 1.0 0.924360 7.432365 0.083333 \n", "4 0.923439 7.505012 2.0 1.0 0.906583 7.456334 0.083333 \n", "... ... ... ... ... ... ... ... \n", "320183 14.840476 9.786501 2.0 NaN 15.214551 10.027093 NaN \n", "320184 15.033432 9.870472 2.0 1.0 15.244872 10.047117 0.083333 \n", "320185 15.211560 9.943236 2.0 1.0 15.318496 10.015218 0.083333 \n", "320186 15.377673 10.008965 2.0 1.0 15.400203 9.935355 0.083333 \n", "320187 15.538255 10.075935 2.0 1.0 15.416893 10.051785 0.083333 \n", "\n", "[320188 rows x 13 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "# data['node_type'] = 'PEDESTRIAN' # compatibility with Trajectron++\n", "# data['node_id'] = data['track_id'].astype(str)\n", "data['track_id'] = pd.to_numeric(data['track_id'], downcast='integer')\n", "\n", "\n", "data['dt'] = data['diff'] * (1/FPS)\n", "data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# position into an average coordinate system. (DO THESE NEED TO BE STORED?)\n", "# Don't do this, messes up\n", "# data['pos_x'] = data['pos_x'] - data['pos_x'].mean()\n", "# data['pos_y'] = data['pos_y'] - data['pos_y'].mean()\n", " \n", "# data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data['diff'].hist()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The dataset is a bit crappy because it has different frame step: ranging from predominantly 1 and 2 to sometimes have 3 and 4 as well. This inevitabily leads to difference in speed caluclations" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "if SRC_H is not None:\n", " H = np.loadtxt(SRC_H, delimiter=',')\n", "else:\n", " H = None" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No H given, probably already projected data?\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
frame_idtrack_idltwhxystatediffx_rawy_rawdtproj_xproj_y
09.010.000000565.56616288.795326173.9175420.8551007.1361932.0NaN0.8815957.341152NaN0.8551007.136193
110.010.000000565.11669988.801704171.3342900.8731327.2352332.01.00.8707037.3091680.0833330.8731327.235233
211.010.000000564.87457390.596596177.1999510.8909577.3289892.01.00.9013747.3700440.0833330.8909577.328989
312.010.000000564.87426890.928131183.1257320.9077847.4181872.01.00.9243607.4323650.0833330.9077847.418187
413.010.000000569.93121386.213280180.7742920.9234397.5050122.01.00.9065837.4563340.0833330.9234397.505012
................................................
32018360159.036321830.709717651.257446150.202515157.23974614.8404769.7865012.0NaN15.21455110.027093NaN14.8404769.786501
32018460160.036321834.013672649.612122153.686646160.87402315.0334329.8704722.01.015.24487210.0471170.08333315.0334329.870472
32018560161.036321845.373047651.249756147.178589153.72924815.2115609.9432362.01.015.31849610.0152180.08333315.2115609.943236
32018660162.036321857.388916650.908203136.407349142.35461415.37767310.0089652.01.015.4002039.9353550.08333315.37767310.008965
32018760163.036321862.792725658.719971141.984253149.05230715.53825510.0759352.01.015.41689310.0517850.08333315.53825510.075935
\n", "

320188 rows × 15 columns

\n", "
" ], "text/plain": [ " frame_id track_id l t w h \\\n", "0 9.0 1 0.000000 565.566162 88.795326 173.917542 \n", "1 10.0 1 0.000000 565.116699 88.801704 171.334290 \n", "2 11.0 1 0.000000 564.874573 90.596596 177.199951 \n", "3 12.0 1 0.000000 564.874268 90.928131 183.125732 \n", "4 13.0 1 0.000000 569.931213 86.213280 180.774292 \n", "... ... ... ... ... ... ... \n", "320183 60159.0 3632 1830.709717 651.257446 150.202515 157.239746 \n", "320184 60160.0 3632 1834.013672 649.612122 153.686646 160.874023 \n", "320185 60161.0 3632 1845.373047 651.249756 147.178589 153.729248 \n", "320186 60162.0 3632 1857.388916 650.908203 136.407349 142.354614 \n", "320187 60163.0 3632 1862.792725 658.719971 141.984253 149.052307 \n", "\n", " x y state diff x_raw y_raw dt \\\n", "0 0.855100 7.136193 2.0 NaN 0.881595 7.341152 NaN \n", "1 0.873132 7.235233 2.0 1.0 0.870703 7.309168 0.083333 \n", "2 0.890957 7.328989 2.0 1.0 0.901374 7.370044 0.083333 \n", "3 0.907784 7.418187 2.0 1.0 0.924360 7.432365 0.083333 \n", "4 0.923439 7.505012 2.0 1.0 0.906583 7.456334 0.083333 \n", "... ... ... ... ... ... ... ... \n", "320183 14.840476 9.786501 2.0 NaN 15.214551 10.027093 NaN \n", "320184 15.033432 9.870472 2.0 1.0 15.244872 10.047117 0.083333 \n", "320185 15.211560 9.943236 2.0 1.0 15.318496 10.015218 0.083333 \n", "320186 15.377673 10.008965 2.0 1.0 15.400203 9.935355 0.083333 \n", "320187 15.538255 10.075935 2.0 1.0 15.416893 10.051785 0.083333 \n", "\n", " proj_x proj_y \n", "0 0.855100 7.136193 \n", "1 0.873132 7.235233 \n", "2 0.890957 7.328989 \n", "3 0.907784 7.418187 \n", "4 0.923439 7.505012 \n", "... ... ... \n", "320183 14.840476 9.786501 \n", "320184 15.033432 9.870472 \n", "320185 15.211560 9.943236 \n", "320186 15.377673 10.008965 \n", "320187 15.538255 10.075935 \n", "\n", "[320188 rows x 15 columns]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "if H is not None:\n", " print(\"Projecting data\")\n", " data['foot_x'] = data['pos_x'] + 0.5 * data['width']\n", " data['foot_y'] = data['pos_y'] + 0.5 * data['height']\n", " \n", " transformed = cv2.perspectiveTransform(np.array([data[['foot_x','foot_y']].to_numpy()]),H)[0]\n", " data['proj_x'], data['proj_y'] = transformed[:,0], transformed[:,1]\n", " data['proj_x'] = data['proj_x'].div(100) # cm to m\n", " data['proj_y'] = data['proj_y'].div(100) # cm to m\n", " # and shift to mean (THES NEED TO BE STORED AND REUSED IN LIVE SETTING)\n", " mean_x = data['proj_x'].mean()\n", " mean_y = data['proj_y'].mean()\n", " data['proj_x'] = data['proj_x'] - data['proj_x'].mean()\n", " data['proj_y'] = data['proj_y'] - data['proj_y'].mean()\n", "else:\n", " print(\"No H given, probably already projected data?\")\n", " mean_x = 0\n", " mean_y = 0\n", " data['proj_x'] = data['x']\n", " data['proj_y'] = data['y']\n", "data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Deriving displacement, velocity and accelation from x and y\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
frame_idtrack_idltwhxystatediff...y_rawdtproj_xproj_ydxdyvxvyaxay
09.010.000000565.56616288.795326173.9175420.8551007.1361932.0NaN...7.341152NaN0.8551007.136193NaNNaNNaNNaNNaNNaN
110.010.000000565.11669988.801704171.3342900.8731327.2352332.01.0...7.3091680.0833330.8731327.2352330.0180320.0990390.2163831.188473NaNNaN
211.010.000000564.87457390.596596177.1999510.8909577.3289892.01.0...7.3700440.0833330.8909577.3289890.0178250.0937560.2138991.125077-0.029812-0.760753
312.010.000000564.87426890.928131183.1257320.9077847.4181872.01.0...7.4323650.0833330.9077847.4181870.0168270.0891980.2019241.070371-0.143699-0.656466
413.010.000000569.93121386.213280180.7742920.9234397.5050122.01.0...7.4563340.0833330.9234397.5050120.0156550.0868250.1878651.041902-0.168701-0.341637
..................................................................
32018360159.036321830.709717651.257446150.202515157.23974614.8404769.7865012.0NaN...10.027093NaN14.8404769.786501NaNNaNNaNNaNNaNNaN
32018460160.036321834.013672649.612122153.686646160.87402315.0334329.8704722.01.0...10.0471170.08333315.0334329.8704720.1929550.0839712.3154631.007656NaNNaN
32018560161.036321845.373047651.249756147.178589153.72924815.2115609.9432362.01.0...10.0152180.08333315.2115609.9432360.1781280.0727642.1375420.873173-2.135059-1.613797
32018660162.036321857.388916650.908203136.407349142.35461415.37767310.0089652.01.0...9.9353550.08333315.37767310.0089650.1661130.0657281.9933520.788742-1.730279-1.013172
32018760163.036321862.792725658.719971141.984253149.05230715.53825510.0759352.01.0...10.0517850.08333315.53825510.0759350.1605820.0669711.9269870.803649-0.7963760.178886
\n", "

320188 rows × 21 columns

\n", "
" ], "text/plain": [ " frame_id track_id l t w h \\\n", "0 9.0 1 0.000000 565.566162 88.795326 173.917542 \n", "1 10.0 1 0.000000 565.116699 88.801704 171.334290 \n", "2 11.0 1 0.000000 564.874573 90.596596 177.199951 \n", "3 12.0 1 0.000000 564.874268 90.928131 183.125732 \n", "4 13.0 1 0.000000 569.931213 86.213280 180.774292 \n", "... ... ... ... ... ... ... \n", "320183 60159.0 3632 1830.709717 651.257446 150.202515 157.239746 \n", "320184 60160.0 3632 1834.013672 649.612122 153.686646 160.874023 \n", "320185 60161.0 3632 1845.373047 651.249756 147.178589 153.729248 \n", "320186 60162.0 3632 1857.388916 650.908203 136.407349 142.354614 \n", "320187 60163.0 3632 1862.792725 658.719971 141.984253 149.052307 \n", "\n", " x y state diff ... y_raw dt \\\n", "0 0.855100 7.136193 2.0 NaN ... 7.341152 NaN \n", "1 0.873132 7.235233 2.0 1.0 ... 7.309168 0.083333 \n", "2 0.890957 7.328989 2.0 1.0 ... 7.370044 0.083333 \n", "3 0.907784 7.418187 2.0 1.0 ... 7.432365 0.083333 \n", "4 0.923439 7.505012 2.0 1.0 ... 7.456334 0.083333 \n", "... ... ... ... ... ... ... ... \n", "320183 14.840476 9.786501 2.0 NaN ... 10.027093 NaN \n", "320184 15.033432 9.870472 2.0 1.0 ... 10.047117 0.083333 \n", "320185 15.211560 9.943236 2.0 1.0 ... 10.015218 0.083333 \n", "320186 15.377673 10.008965 2.0 1.0 ... 9.935355 0.083333 \n", "320187 15.538255 10.075935 2.0 1.0 ... 10.051785 0.083333 \n", "\n", " proj_x proj_y dx dy vx vy \\\n", "0 0.855100 7.136193 NaN NaN NaN NaN \n", "1 0.873132 7.235233 0.018032 0.099039 0.216383 1.188473 \n", "2 0.890957 7.328989 0.017825 0.093756 0.213899 1.125077 \n", "3 0.907784 7.418187 0.016827 0.089198 0.201924 1.070371 \n", "4 0.923439 7.505012 0.015655 0.086825 0.187865 1.041902 \n", "... ... ... ... ... ... ... \n", "320183 14.840476 9.786501 NaN NaN NaN NaN \n", "320184 15.033432 9.870472 0.192955 0.083971 2.315463 1.007656 \n", "320185 15.211560 9.943236 0.178128 0.072764 2.137542 0.873173 \n", "320186 15.377673 10.008965 0.166113 0.065728 1.993352 0.788742 \n", "320187 15.538255 10.075935 0.160582 0.066971 1.926987 0.803649 \n", "\n", " ax ay \n", "0 NaN NaN \n", "1 NaN NaN \n", "2 -0.029812 -0.760753 \n", "3 -0.143699 -0.656466 \n", "4 -0.168701 -0.341637 \n", "... ... ... \n", "320183 NaN NaN \n", "320184 NaN NaN \n", "320185 -2.135059 -1.613797 \n", "320186 -1.730279 -1.013172 \n", "320187 -0.796376 0.178886 \n", "\n", "[320188 rows x 21 columns]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Deriving displacement, velocity and accelation from x and y\")\n", "data['dx'] = data.groupby(['track_id'])['proj_x'].diff()\n", "data['dy'] = data.groupby(['track_id'])['proj_y'].diff()\n", "data['vx'] = data['dx'].div(data['dt'], axis=0)\n", "data['vy'] = data['dy'].div(data['dt'], axis=0)\n", "\n", "data['ax'] = data.groupby(['track_id'])['vx'].diff().div(data['dt'], axis=0)\n", "data['ay'] = data.groupby(['track_id'])['vy'].diff().div(data['dt'], axis=0)\n", "\n", "data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
frame_idtrack_idltwhxystatediff...dxdyvxvyaxayvaheadingd_heading
09.010.000000565.56616288.795326173.9175420.8551007.1361932.0NaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
110.010.000000565.11669988.801704171.3342900.8731327.2352332.01.0...0.0180320.0990390.2163831.188473NaNNaN1.208011NaN79.681298NaN
211.010.000000564.87457390.596596177.1999510.8909577.3289892.01.0...0.0178250.0937560.2138991.125077-0.029812-0.7607531.145230-0.75337379.235449-5.350188
312.010.000000564.87426890.928131183.1257320.9077847.4181872.01.0...0.0168270.0891980.2019241.070371-0.143699-0.6564661.089251-0.67174079.3168070.976297
413.010.000000569.93121386.213280180.7742920.9234397.5050122.01.0...0.0156550.0868250.1878651.041902-0.168701-0.3416371.058703-0.36657679.7788285.544252
..................................................................
32018360159.036321830.709717651.257446150.202515157.23974614.8404769.7865012.0NaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
32018460160.036321834.013672649.612122153.686646160.87402315.0334329.8704722.01.0...0.1929550.0839712.3154631.007656NaNNaN2.525221NaN23.517970NaN
32018560161.036321845.373047651.249756147.178589153.72924815.2115609.9432362.01.0...0.1781280.0727642.1375420.873173-2.135059-1.6137972.309007-2.59456222.219713-15.579091
32018660162.036321857.388916650.908203136.407349142.35461415.37767310.0089652.01.0...0.1661130.0657281.9933520.788742-1.730279-1.0131722.143727-1.98336621.588019-7.580324
32018760163.036321862.792725658.719971141.984253149.05230715.53825510.0759352.01.0...0.1605820.0669711.9269870.803649-0.7963760.1788862.087853-0.67048422.63854712.606340
\n", "

320188 rows × 25 columns

\n", "
" ], "text/plain": [ " frame_id track_id l t w h \\\n", "0 9.0 1 0.000000 565.566162 88.795326 173.917542 \n", "1 10.0 1 0.000000 565.116699 88.801704 171.334290 \n", "2 11.0 1 0.000000 564.874573 90.596596 177.199951 \n", "3 12.0 1 0.000000 564.874268 90.928131 183.125732 \n", "4 13.0 1 0.000000 569.931213 86.213280 180.774292 \n", "... ... ... ... ... ... ... \n", "320183 60159.0 3632 1830.709717 651.257446 150.202515 157.239746 \n", "320184 60160.0 3632 1834.013672 649.612122 153.686646 160.874023 \n", "320185 60161.0 3632 1845.373047 651.249756 147.178589 153.729248 \n", "320186 60162.0 3632 1857.388916 650.908203 136.407349 142.354614 \n", "320187 60163.0 3632 1862.792725 658.719971 141.984253 149.052307 \n", "\n", " x y state diff ... dx dy vx \\\n", "0 0.855100 7.136193 2.0 NaN ... NaN NaN NaN \n", "1 0.873132 7.235233 2.0 1.0 ... 0.018032 0.099039 0.216383 \n", "2 0.890957 7.328989 2.0 1.0 ... 0.017825 0.093756 0.213899 \n", "3 0.907784 7.418187 2.0 1.0 ... 0.016827 0.089198 0.201924 \n", "4 0.923439 7.505012 2.0 1.0 ... 0.015655 0.086825 0.187865 \n", "... ... ... ... ... ... ... ... ... \n", "320183 14.840476 9.786501 2.0 NaN ... NaN NaN NaN \n", "320184 15.033432 9.870472 2.0 1.0 ... 0.192955 0.083971 2.315463 \n", "320185 15.211560 9.943236 2.0 1.0 ... 0.178128 0.072764 2.137542 \n", "320186 15.377673 10.008965 2.0 1.0 ... 0.166113 0.065728 1.993352 \n", "320187 15.538255 10.075935 2.0 1.0 ... 0.160582 0.066971 1.926987 \n", "\n", " vy ax ay v a heading d_heading \n", "0 NaN NaN NaN NaN NaN NaN NaN \n", "1 1.188473 NaN NaN 1.208011 NaN 79.681298 NaN \n", "2 1.125077 -0.029812 -0.760753 1.145230 -0.753373 79.235449 -5.350188 \n", "3 1.070371 -0.143699 -0.656466 1.089251 -0.671740 79.316807 0.976297 \n", "4 1.041902 -0.168701 -0.341637 1.058703 -0.366576 79.778828 5.544252 \n", "... ... ... ... ... ... ... ... \n", "320183 NaN NaN NaN NaN NaN NaN NaN \n", "320184 1.007656 NaN NaN 2.525221 NaN 23.517970 NaN \n", "320185 0.873173 -2.135059 -1.613797 2.309007 -2.594562 22.219713 -15.579091 \n", "320186 0.788742 -1.730279 -1.013172 2.143727 -1.983366 21.588019 -7.580324 \n", "320187 0.803649 -0.796376 0.178886 2.087853 -0.670484 22.638547 12.606340 \n", "\n", "[320188 rows x 25 columns]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# then we need the velocity itself\n", "data['v'] = np.sqrt(data['vx'].pow(2) + data['vy'].pow(2))\n", "# and derive acceleration\n", "data['a'] = data.groupby(['track_id'])['v'].diff().div(data['dt'], axis=0)\n", "\n", "# we can calculate heading based on the velocity components\n", "data['heading'] = (np.arctan2(data['vy'], data['vx']) * 180 / np.pi) % 360\n", "\n", "# and derive it to get the rate of change of the heading\n", "data['d_heading'] = data.groupby(['track_id'])['heading'].diff().div(data['dt'], axis=0)\n", "\n", "data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
frame_idtrack_idltwhxystatediff...dxdyvxvyaxayvaheadingd_heading
09.010.000000565.56616288.795326173.9175420.8551007.1361932.0NaN...NaNNaNNaNNaNNaNNaN1.208011-0.75337379.681298-5.350188
110.010.000000565.11669988.801704171.3342900.8731327.2352332.01.0...0.0180320.0990390.2163831.188473NaNNaN1.208011-0.75337379.681298-5.350188
211.010.000000564.87457390.596596177.1999510.8909577.3289892.01.0...0.0178250.0937560.2138991.125077-0.029812-0.7607531.145230-0.75337379.235449-5.350188
312.010.000000564.87426890.928131183.1257320.9077847.4181872.01.0...0.0168270.0891980.2019241.070371-0.143699-0.6564661.089251-0.67174079.3168070.976297
413.010.000000569.93121386.213280180.7742920.9234397.5050122.01.0...0.0156550.0868250.1878651.041902-0.168701-0.3416371.058703-0.36657679.7788285.544252
..................................................................
32018360159.036321830.709717651.257446150.202515157.23974614.8404769.7865012.0NaN...NaNNaNNaNNaNNaNNaN2.525221-2.59456223.517970-15.579091
32018460160.036321834.013672649.612122153.686646160.87402315.0334329.8704722.01.0...0.1929550.0839712.3154631.007656NaNNaN2.525221-2.59456223.517970-15.579091
32018560161.036321845.373047651.249756147.178589153.72924815.2115609.9432362.01.0...0.1781280.0727642.1375420.873173-2.135059-1.6137972.309007-2.59456222.219713-15.579091
32018660162.036321857.388916650.908203136.407349142.35461415.37767310.0089652.01.0...0.1661130.0657281.9933520.788742-1.730279-1.0131722.143727-1.98336621.588019-7.580324
32018760163.036321862.792725658.719971141.984253149.05230715.53825510.0759352.01.0...0.1605820.0669711.9269870.803649-0.7963760.1788862.087853-0.67048422.63854712.606340
\n", "

320188 rows × 25 columns

\n", "
" ], "text/plain": [ " frame_id track_id l t w h \\\n", "0 9.0 1 0.000000 565.566162 88.795326 173.917542 \n", "1 10.0 1 0.000000 565.116699 88.801704 171.334290 \n", "2 11.0 1 0.000000 564.874573 90.596596 177.199951 \n", "3 12.0 1 0.000000 564.874268 90.928131 183.125732 \n", "4 13.0 1 0.000000 569.931213 86.213280 180.774292 \n", "... ... ... ... ... ... ... \n", "320183 60159.0 3632 1830.709717 651.257446 150.202515 157.239746 \n", "320184 60160.0 3632 1834.013672 649.612122 153.686646 160.874023 \n", "320185 60161.0 3632 1845.373047 651.249756 147.178589 153.729248 \n", "320186 60162.0 3632 1857.388916 650.908203 136.407349 142.354614 \n", "320187 60163.0 3632 1862.792725 658.719971 141.984253 149.052307 \n", "\n", " x y state diff ... dx dy vx \\\n", "0 0.855100 7.136193 2.0 NaN ... NaN NaN NaN \n", "1 0.873132 7.235233 2.0 1.0 ... 0.018032 0.099039 0.216383 \n", "2 0.890957 7.328989 2.0 1.0 ... 0.017825 0.093756 0.213899 \n", "3 0.907784 7.418187 2.0 1.0 ... 0.016827 0.089198 0.201924 \n", "4 0.923439 7.505012 2.0 1.0 ... 0.015655 0.086825 0.187865 \n", "... ... ... ... ... ... ... ... ... \n", "320183 14.840476 9.786501 2.0 NaN ... NaN NaN NaN \n", "320184 15.033432 9.870472 2.0 1.0 ... 0.192955 0.083971 2.315463 \n", "320185 15.211560 9.943236 2.0 1.0 ... 0.178128 0.072764 2.137542 \n", "320186 15.377673 10.008965 2.0 1.0 ... 0.166113 0.065728 1.993352 \n", "320187 15.538255 10.075935 2.0 1.0 ... 0.160582 0.066971 1.926987 \n", "\n", " vy ax ay v a heading d_heading \n", "0 NaN NaN NaN 1.208011 -0.753373 79.681298 -5.350188 \n", "1 1.188473 NaN NaN 1.208011 -0.753373 79.681298 -5.350188 \n", "2 1.125077 -0.029812 -0.760753 1.145230 -0.753373 79.235449 -5.350188 \n", "3 1.070371 -0.143699 -0.656466 1.089251 -0.671740 79.316807 0.976297 \n", "4 1.041902 -0.168701 -0.341637 1.058703 -0.366576 79.778828 5.544252 \n", "... ... ... ... ... ... ... ... \n", "320183 NaN NaN NaN 2.525221 -2.594562 23.517970 -15.579091 \n", "320184 1.007656 NaN NaN 2.525221 -2.594562 23.517970 -15.579091 \n", "320185 0.873173 -2.135059 -1.613797 2.309007 -2.594562 22.219713 -15.579091 \n", "320186 0.788742 -1.730279 -1.013172 2.143727 -1.983366 21.588019 -7.580324 \n", "320187 0.803649 -0.796376 0.178886 2.087853 -0.670484 22.638547 12.606340 \n", "\n", "[320188 rows x 25 columns]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# we can backfill the v and a, so that our model can make estimations\n", "# based on these assumed values\n", "data['v'] = data.groupby(['track_id'])['v'].bfill()\n", "data['a'] = data.groupby(['track_id'])['a'].bfill()\n", "\n", "data['heading'] = data.groupby(['track_id'])['heading'].bfill()\n", "data['d_heading'] = data.groupby(['track_id'])['d_heading'].bfill()\n", "data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "312423 items in filtered set, out of 320188 in total set\n" ] } ], "source": [ "filtered_data = data.groupby(['track_id']).filter(lambda group: len(group) >= window+1) # a lenght of 3 is neccessary to have all relevant derivatives of position\n", "filtered_data = filtered_data.set_index(['track_id', 'frame_id']) # use for quick access\n", "print(filtered_data.shape[0], \"items in filtered set, out of\", data.shape[0], \"in total set\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1263 training tracks, 316 test tracks\n" ] } ], "source": [ "track_ids = filtered_data.index.unique('track_id').to_numpy()\n", "np.random.shuffle(track_ids)\n", "test_offset_idx = int(len(track_ids) * .8)\n", "training_ids, test_ids = track_ids[:test_offset_idx], track_ids[test_offset_idx:]\n", "print(f\"{len(training_ids)} training tracks, {len(test_ids)} test tracks\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "here, draw out a sample track to see if it looks alright. **unfortunately the imate isn't mapped properly**." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1058\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0 0\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import random\n", "if H:\n", " img_src = \"../DATASETS/hof/webcam20231103-2.png\"\n", " # dst = cv2.warpPerspective(img_src,H,(2500,1920))\n", " src_img = cv2.imread(img_src)\n", " print(src_img.shape)\n", " h1,w1 = src_img.shape[:2]\n", " corners = np.float32([[0,0], [w1, 0], [0, h1], [w1, h1]])\n", "\n", " print(corners)\n", " corners_projected = cv2.perspectiveTransform(corners.reshape((-1,4,2)), H)[0]\n", " print(corners_projected)\n", " [xmin, ymin] = np.int32(corners_projected.min(axis=0).ravel() - 0.5)\n", " [xmax, ymax] = np.int32(corners_projected.max(axis=0).ravel() + 0.5)\n", " print(xmin, xmax, ymin, ymax)\n", "\n", " dst = cv2.warpPerspective(src_img,H, (xmax, ymax))\n", " def plot_track(track_id: int):\n", " plt.gca().invert_yaxis()\n", "\n", " plt.imshow(dst, origin='lower', extent=[xmin/100-mean_x, xmax/100-mean_x, ymin/100-mean_y, ymax/100-mean_y])\n", " # plot scatter plot with x and y data \n", " \n", " ax = plt.scatter(\n", " filtered_data.loc[track_id,:]['proj_x'],\n", " filtered_data.loc[track_id,:]['proj_y'],\n", " marker=\"*\") \n", " ax.axes.invert_yaxis()\n", " plt.plot(\n", " filtered_data.loc[track_id,:]['proj_x'],\n", " filtered_data.loc[track_id,:]['proj_y']\n", " )\n", "else:\n", " def plot_track(track_id: int):\n", " ax = plt.scatter(\n", " filtered_data.loc[track_id,:]['x'],\n", " filtered_data.loc[track_id,:]['y'],\n", " marker=\"*\") \n", " plt.plot(\n", " filtered_data.loc[track_id,:]['proj_x'],\n", " filtered_data.loc[track_id,:]['proj_y']\n", " )\n", "\n", "# print(filtered_data.loc[track_id,:]['proj_x'])\n", "# _track_id = 2188\n", "_track_id = random.choice(track_ids)\n", "print(_track_id)\n", "plot_track(_track_id)\n", "\n", "for track_id in random.choices(track_ids, k=100):\n", " plot_track(track_id)\n", " \n", "print(mean_x, mean_y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now make the dataset:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# a=filtered_data.loc[1]\n", "# min(a.index.tolist())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 0/1263 [00:00> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[31], line 31\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[1;32m 30\u001b[0m cache(epoch, loss)\n\u001b[0;32m---> 31\u001b[0m \u001b[43mevaluate\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 33\u001b[0m evaluate()\n", "Cell \u001b[0;32mIn[30], line 5\u001b[0m, in \u001b[0;36mevaluate\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m model\u001b[38;5;241m.\u001b[39meval()\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m torch\u001b[38;5;241m.\u001b[39mno_grad():\n\u001b[0;32m----> 5\u001b[0m y_pred \u001b[38;5;241m=\u001b[39m \u001b[43mmodel\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX_train\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdevice\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdevice\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m train_rmse \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39msqrt(loss_fn(y_pred, y_train))\n\u001b[1;32m 7\u001b[0m y_pred \u001b[38;5;241m=\u001b[39m model(X_test\u001b[38;5;241m.\u001b[39mto(device\u001b[38;5;241m=\u001b[39mdevice))\n", "File \u001b[0;32m~/suspicion/trap/.venv/lib/python3.10/site-packages/torch/nn/modules/module.py:1130\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 1126\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1127\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1128\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1130\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1131\u001b[0m \u001b[38;5;66;03m# Do not call functions when jit is used\u001b[39;00m\n\u001b[1;32m 1132\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[38;5;241m=\u001b[39m [], []\n", "Cell \u001b[0;32mIn[28], line 15\u001b[0m, in \u001b[0;36mLSTMModel.forward\u001b[0;34m(self, x)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, x): \u001b[38;5;66;03m# defines forward pass of the neural network\u001b[39;00m\n\u001b[1;32m 14\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlin1(x)\n\u001b[0;32m---> 15\u001b[0m out, h0 \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlstm\u001b[49m\u001b[43m(\u001b[49m\u001b[43mout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;66;03m# extract only the last time step, see https://machinelearningmastery.com/lstm-for-time-series-prediction-in-pytorch/\u001b[39;00m\n\u001b[1;32m 17\u001b[0m \u001b[38;5;66;03m# print(out.shape)\u001b[39;00m\n\u001b[1;32m 18\u001b[0m out \u001b[38;5;241m=\u001b[39m out[:, \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m,:]\n", "File \u001b[0;32m~/suspicion/trap/.venv/lib/python3.10/site-packages/torch/nn/modules/module.py:1130\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 1126\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1127\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1128\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1130\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1131\u001b[0m \u001b[38;5;66;03m# Do not call functions when jit is used\u001b[39;00m\n\u001b[1;32m 1132\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[38;5;241m=\u001b[39m [], []\n", "File \u001b[0;32m~/suspicion/trap/.venv/lib/python3.10/site-packages/torch/nn/modules/rnn.py:769\u001b[0m, in \u001b[0;36mLSTM.forward\u001b[0;34m(self, input, hx)\u001b[0m\n\u001b[1;32m 767\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcheck_forward_args(\u001b[38;5;28minput\u001b[39m, hx, batch_sizes)\n\u001b[1;32m 768\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m batch_sizes \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 769\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43m_VF\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlstm\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_flat_weights\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbias\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnum_layers\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 770\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdropout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtraining\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbidirectional\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbatch_first\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 771\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 772\u001b[0m result \u001b[38;5;241m=\u001b[39m _VF\u001b[38;5;241m.\u001b[39mlstm(\u001b[38;5;28minput\u001b[39m, batch_sizes, hx, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_flat_weights, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbias,\n\u001b[1;32m 773\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnum_layers, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdropout, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtraining, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbidirectional)\n", "\u001b[0;31mRuntimeError\u001b[0m: CUDA out of memory. Tried to allocate 28.40 GiB (GPU 0; 23.59 GiB total capacity; 15.01 GiB already allocated; 7.20 GiB free; 15.03 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF" ] } ], "source": [ "start_epoch, loss = load_most_recent()\n", "if start_epoch is None:\n", " start_epoch = 0\n", "else:\n", " print(f\"starting from epoch {start_epoch} (loss: {loss})\")\n", "\n", "# Train Network\n", "for epoch in tqdm(range(start_epoch+1,num_epochs+1)):\n", " # toggle train mode\n", " model.train()\n", " for batch_idx, (data, targets) in enumerate(loader_train):\n", " # Get data to cuda if possible\n", " data = data.to(device=device).squeeze(1)\n", " targets = targets.to(device=device)\n", "\n", " # forward\n", " scores = model(data)\n", " loss = loss_fn(scores, targets)\n", "\n", " # backward\n", " optimizer.zero_grad()\n", " loss.backward()\n", "\n", " # gradient descent update step/adam step\n", " optimizer.step()\n", "\n", " if epoch % 5 != 0:\n", " continue\n", "\n", " cache(epoch, loss)\n", " evaluate()\n", "\n", "evaluate()" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'model' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[1], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241m.\u001b[39meval()\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m torch\u001b[38;5;241m.\u001b[39mno_grad():\n\u001b[1;32m 3\u001b[0m y_pred \u001b[38;5;241m=\u001b[39m model(X_train\u001b[38;5;241m.\u001b[39mto(device\u001b[38;5;241m=\u001b[39mdevice))\n", "\u001b[0;31mNameError\u001b[0m: name 'model' is not defined" ] } ], "source": [ "model.eval()\n", "with torch.no_grad():\n", " y_pred = model(X_train.to(device=device))\n", " print(y_pred.shape, y_train.shape)\n", "y_train, y_pred" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0, 0)" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean_x, mean_y" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import scipy\n", "\n", "\n", "def predict_and_plot(feature, steps = 50):\n", " lenght = feature.shape[0]\n", " # feature = filtered_data.loc[_track_id,:].iloc[:5][in_fields].values\n", " # nxt = filtered_data.loc[_track_id,:].iloc[5][out_fields]\n", " with torch.no_grad():\n", " for i in range(steps):\n", " # predict_f = scipy.ndimage.uniform_filter(feature)\n", " # predict_f = scipy.interpolate.splrep(feature[:][0], feature[:][1],)\n", " # predict_f = scipy.signal.spline_feature(feature, lmbda=.1)\n", " # bathc size of one, so feature as single item in array\n", " X = torch.tensor([feature], dtype=torch.float).to(device)\n", " # print(X.shape)\n", " s = model(X)[0].cpu()\n", " \n", " # proj_x proj_y v heading a d_heading\n", " # next_step = feature\n", " dt = 1/ FPS\n", " v = np.sqrt(s[0]**2 + s[1]**2)\n", " heading = (np.arctan2(s[1], s[0]) * 180 / np.pi) % 360\n", " a = (v - feature[-1][2]) / dt\n", " d_heading = (heading - feature[-1][5])\n", " # print(s)\n", " feature = np.append(feature, [[feature[-1][0] + s[0]*dt, feature[-1][1] + s[1]*dt, v, heading, a, d_heading ]], axis=0)\n", " \n", " # print(next_step, nxt)\n", " plt.plot(feature[:lenght,0], feature[:lenght,1], c='orange')\n", " plt.plot(feature[lenght-1:,0], feature[lenght-1:,1], c='red')\n", " plt.scatter(feature[lenght:,0], feature[lenght:,1], c='red')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2515\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "# print(filtered_data.loc[track_id,:]['proj_x'])\n", "_track_id = 8701 # random.choice(track_ids)\n", "_track_id = 3880 # random.choice(track_ids)\n", "\n", "# _track_id = 2780\n", "\n", "for i in range(100):\n", " _track_id = random.choice(track_ids)\n", " plt.plot(\n", " filtered_data.loc[_track_id,:]['proj_x'],\n", " filtered_data.loc[_track_id,:]['proj_y'],\n", " c='grey', alpha=.2\n", " )\n", "\n", "_track_id = random.choice(track_ids)\n", "# _track_id = 801\n", "print(_track_id)\n", "ax = plt.scatter(\n", " filtered_data.loc[_track_id,:]['proj_x'],\n", " filtered_data.loc[_track_id,:]['proj_y'],\n", " marker=\"*\") \n", "plt.plot(\n", " filtered_data.loc[_track_id,:]['proj_x'],\n", " filtered_data.loc[_track_id,:]['proj_y']\n", ")\n", "\n", "predict_and_plot(filtered_data.loc[_track_id,:].iloc[:5][in_fields].values)\n", "predict_and_plot(filtered_data.loc[_track_id,:].iloc[:10][in_fields].values)\n", "predict_and_plot(filtered_data.loc[_track_id,:].iloc[:50][in_fields].values)\n", "# predict_and_plot(filtered_data.loc[_track_id,:].iloc[:70][in_fields].values)\n", "# predict_and_plot(filtered_data.loc[_track_id,:].iloc[:115][in_fields].values)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" } }, "nbformat": 4, "nbformat_minor": 2 }