cotracker/notebooks/demo.ipynb
2023-07-17 17:49:06 -07:00

925 lines
95 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "60a7e08e-93c6-4370-9778-3bb102dce78b",
"metadata": {},
"source": [
"Copyright (c) Meta Platforms, Inc. and affiliates."
]
},
{
"cell_type": "markdown",
"id": "3081cd8f-f6f9-4a1a-8c36-8a857b0c3b03",
"metadata": {},
"source": [
"<a target=\"_blank\" href=\"https://colab.research.google.com/github/facebookresearch/co-tracker/blob/main/notebooks/demo.ipynb\">\n",
" <img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/>\n",
"</a>"
]
},
{
"cell_type": "markdown",
"id": "f9f3240f-0354-4802-b8b5-9070930fc957",
"metadata": {},
"source": [
"# CoTracker: It is Better to Track Together\n",
"This is a demo for <a href=\"https://co-tracker.github.io/\">CoTracker</a>, a model that can track any point in a video."
]
},
{
"cell_type": "markdown",
"id": "36ff1fd0-572e-47fb-8221-1e73ac17cfd1",
"metadata": {},
"source": [
"<img src=\"https://www.robots.ox.ac.uk/~nikita/storage/cotracker/bmx-bumps.gif\" alt=\"Logo\" width=\"50%\">"
]
},
{
"cell_type": "markdown",
"id": "6757bfa3-d663-4a54-9722-3e1a7da3307c",
"metadata": {},
"source": [
"Let's install dependencies:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "1745a859-71d4-4ec3-8ef3-027cabe786d4",
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import cv2\n",
"import torch\n",
"\n",
"from torchvision.io import read_video\n",
"from cotracker.utils.visualizer import Visualizer\n",
"from IPython.display import HTML"
]
},
{
"cell_type": "markdown",
"id": "7894bd2d-2099-46fa-8286-f0c56298ecd1",
"metadata": {},
"source": [
"Read a video from CO3D:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "f1f9ca4d-951e-49d2-8844-91f7bcadfecd",
"metadata": {},
"outputs": [],
"source": [
"video = read_video('../assets/apple.mp4')[0]\n",
"video = video.permute(0, 3, 1, 2)[None].float()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "fb4c2e9d-0e85-4c10-81a2-827d0759bf87",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<video width=\"640\" height=\"480\" autoplay loop controls>\n",
" <source src=\"../assets/apple.mp4\" type=\"video/mp4\">\n",
" </video>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"HTML(\"\"\"<video width=\"640\" height=\"480\" autoplay loop controls>\n",
" <source src=\"../assets/apple.mp4\" type=\"video/mp4\">\n",
" </video>\"\"\")"
]
},
{
"cell_type": "markdown",
"id": "6f89ae18-54d0-4384-8a79-ca9247f5f31a",
"metadata": {},
"source": [
"Import CoTrackerPredictor and create an instance of it. We'll use this object to estimate tracks:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "d59ac40b-bde8-46d4-bd57-4ead939f22ca",
"metadata": {},
"outputs": [],
"source": [
"from cotracker.predictor import CoTrackerPredictor\n",
"\n",
"model = CoTrackerPredictor(\n",
" checkpoint=os.path.join(\n",
" '../checkpoints/cotracker_stride_4_wind_8.pth'\n",
" )\n",
")"
]
},
{
"cell_type": "markdown",
"id": "e8398155-6dae-4ff0-95f3-dbb52ac70d20",
"metadata": {},
"source": [
"Track points sampled on a regular grid of size 30\\*30 on the first frame:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "17fcaae9-7b3c-474c-977a-cce08a09d580",
"metadata": {},
"outputs": [],
"source": [
"pred_tracks, pred_visibility = model(video, grid_size=30)"
]
},
{
"cell_type": "markdown",
"id": "50a58521-a9ba-4f8b-be02-cfdaf79613a2",
"metadata": {},
"source": [
"Visualize and save the result: "
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "7e793ce0-7b77-46ca-a629-155a6a146000",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Video saved to ./videos/teaser_pred_track.mp4\n"
]
}
],
"source": [
"vis = Visualizer(save_dir='./videos', pad_value=100)\n",
"vis.visualize(video=video, tracks=pred_tracks, filename='teaser');"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "2d0733ba-8fe1-4cd4-b963-2085202fba13",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<video width=\"640\" height=\"480\" autoplay loop controls>\n",
" <source src=\"./videos/teaser_pred_track.mp4\" type=\"video/mp4\">\n",
" </video>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"HTML(\"\"\"<video width=\"640\" height=\"480\" autoplay loop controls>\n",
" <source src=\"./videos/teaser_pred_track.mp4\" type=\"video/mp4\">\n",
" </video>\"\"\")"
]
},
{
"cell_type": "markdown",
"id": "73d88a5f-057c-4b9f-828d-ee0b97d1e72f",
"metadata": {},
"source": [
"## Tracking manually selected points"
]
},
{
"cell_type": "markdown",
"id": "a75bca85-b872-4f4e-be19-ff16f0984037",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"We will start by tracking points queried manually.\n",
"We define a queried point as: [time, x coord, y coord] \n",
"\n",
"So, the code below defines points with different x and y coordinates sampled on frames 0, 10, 20, and 30:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "c6422e7c-8c6f-4269-92c3-245344afe35b",
"metadata": {},
"outputs": [],
"source": [
"queries = torch.tensor([\n",
" [0., 400., 350.], # point tracked from the first frame\n",
" [10., 600., 500.], # frame number 10\n",
" [20., 750., 600.], # ...\n",
" [30., 900., 200.]\n",
"]).cuda()"
]
},
{
"cell_type": "markdown",
"id": "13697a2a-7304-4d18-93be-bfbebf3dc12a",
"metadata": {},
"source": [
"That's what our queried points look like:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "d7141079-d7e0-40b3-b031-a28879c4bd6d",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoEAAAHVCAYAAACOpCHEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABHHElEQVR4nO3de3hU5b33/88kIUMwTEKCOUGCQTkUQYsgMSpYH/OAlHooiGxKlaIVtcFCUR6MW6HSrbC11lMV7b7cYDcqigWtbLRXBESt4SgoJyO4gUTMQcFMQMn5+/uDX9ZmTERCDpPJer+ua10k933PzH27kq+frFlrjcfMTAAAAHCVsGBPAAAAAG2PEAgAAOBChEAAAAAXIgQCAAC4ECEQAADAhQiBAAAALkQIBAAAcCFCIAAAgAsRAgEAAFyIEAgAAOBChEA0y+LFi+XxeBrd7r777mBPr8VUVlZq9uzZSklJUVRUlDIyMpSbmxvsaQFoIW6oZUePHtXcuXN15ZVXKi4uTh6PR4sXL/7e8bt379aVV16p6OhoxcXF6YYbbtCXX37ZdhNGq4sI9gTQMcybN0/p6ekBbQMHDgzSbFrer371K7366quaMWOG+vTpo8WLF+unP/2p1q5dq0svvTTY0wPQQjpyLfvqq680b948paWl6fzzz9c777zzvWM///xzjRgxQjExMXrwwQd19OhR/fGPf9T27du1ceNGRUZGtt3E0WoIgWgRo0eP1tChQ09pbEVFhSIjIxUWFhoHojdu3KilS5fq4Ycf1l133SVJuvHGGzVw4ED9v//3//TBBx8EeYYAWkpHrmXJyckqKipSUlKSNm/erAsvvPB7xz744IP65ptvtGXLFqWlpUmShg0bpv/7f/+vFi9erKlTp7bVtNGKQuMnFyHrnXfekcfj0dKlS3XvvfeqR48e6tKli8rLy3X48GHdddddGjRokKKjo+Xz+TR69Gh99NFHjT7HK6+8ovvvv189evRQ165ddd1118nv96uyslIzZsxQQkKCoqOjNWXKFFVWVjaYy5IlSzRkyBBFRUUpLi5O//Iv/6LCwsIfXMOrr76q8PDwgKLXuXNn3XzzzcrLyzul5wAQ2jpCLfN6vUpKSjql9f7tb3/Tz372MycASlJWVpb69u2rV1555ZSeA+0fRwLRIvx+v7766quAtu7duztf/+EPf1BkZKTuuusuVVZWKjIyUrt27dJrr72m8ePHKz09XSUlJXr22Wd12WWXadeuXUpJSQl4vvnz5ysqKkp333239u7dqyeffFKdOnVSWFiYvv76a/3+97/X+vXrtXjxYqWnp2vOnDnOYx944AHdd999uv766/XrX/9aX375pZ588kmNGDFCW7duVWxs7PeubevWrerbt698Pl9A+7BhwyRJ27ZtU2pq6un+pwPQjnTkWnaqDh48qNLS0kaPiA4bNkyrVq1q9mugnTCgGRYtWmSSGt3MzNauXWuSrHfv3vbtt98GPLaiosJqa2sD2vbt22der9fmzZvntNU/x8CBA62qqsppnzhxonk8Hhs9enTAc2RmZlqvXr2c7/fv32/h4eH2wAMPBIzbvn27RURENGj/rnPPPdf+z//5Pw3ad+7caZLsmWeeOenjAbR/bqhlJ9q0aZNJskWLFn1v31//+tcGfbNmzTJJVlFRccqvhfaLt4PRIp566inl5uYGbCeaPHmyoqKiAtq8Xq9zLk1tba0OHTqk6Oho9evXTx9++GGD17jxxhvVqVMn5/uMjAyZmW666aaAcRkZGSosLFRNTY0kafny5aqrq9P111+vr776ytmSkpLUp08frV279qRrO3bsmLxeb4P2zp07O/0AOoaOXMtOVX1No+51fLwdjBYxbNiwk55M/d2r7SSprq5Ojz/+uJ5++mnt27dPtbW1Tl98fHyD8SeemyJJMTExktTgrdiYmBjV1dXJ7/crPj5ee/bskZmpT58+jc7txGLcmKioqEbPy6moqHD6AXQMHbmWnar6mkbd6/gIgWgTjRWMBx98UPfdd59uuukm/eEPf1BcXJzCwsI0Y8YM1dXVNRgfHh7e6HN/X7uZSTpeoD0ej958881Gx0ZHR5907snJyTp48GCD9qKiIklqcL4PgI4rlGvZqUpOTpb0vzXuREVFRYqLi2v0KCFCDyEQQfPqq6/q8ssv13PPPRfQXlZWFnAidnOdffbZMjOlp6erb9++TX78j3/8Y61du1bl5eUBF4ds2LDB6QfgXqFSy05Vjx49dOaZZ2rz5s0N+jZu3EjN60A4JxBBEx4e7vyFW2/ZsmWNHnVrjrFjxyo8PFz3339/g9czMx06dOikj7/uuutUW1urv/zlL05bZWWlFi1apIyMDK4MBlwuVGpZU4wbN04rV64MuPXM6tWr9emn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AC5ECAQAAHAhQiAAAIALEQIBAABciBAIAADgQoRAAAAAFyIEAgAAuBAhEAAAwIUIgQAAAC4UEewJnA4zkySVl5cHeSYA2ov6elBfH0IZNQ7AiVqrvoVkCDx06JAkKTU1NcgzAdDeHDlyRDExMcGeRrNQ4wA0pqXrW0iGwLi4OElSQUFByBf78vJypaamqrCwUD6fL9jTaRbW0j65ZS1mpiNHjiglJSVIs2s51Lj2ibW0Px1lHVJw6ltIhsCwsOOnMsbExIT8Tq/n8/lYSzvEWtqn71tLqAemetS49o21tD8dZR1S29Y3LgwBAABwIUIgAACAC4VkCPR6vZo7d668Xm+wp9JsrKV9Yi3tU0day8l0pHWylvapo6ylo6xDCs5aPNYR7qcAAACAJgnJI4EAAABoHkIgAACACxECAQAAXIgQCAAA4EIhGQKfeuopnXXWWercubMyMjK0cePGYE8pwPz583XhhReqa9euSkhI0LXXXqv8/PyAMT/5yU/k8XgCtttuuy1gTEFBgcaMGaMuXbooISFBs2bNUk1NTVsuRb///e8bzLN///5Of0VFhbKzsxUfH6/o6GiNGzdOJSUl7W4dknTWWWc1WIvH41F2drak9r1P3n33XV111VVKSUmRx+PRa6+9FtBvZpozZ46Sk5MVFRWlrKws7dmzJ2DM4cOHNWnSJPl8PsXGxurmm2/W0aNHA8Z8/PHHGj58uDp37qzU1FQ99NBDbbqW6upqzZ49W4MGDdIZZ5yhlJQU3Xjjjfriiy8CnqOxfblgwYI2X0troL61nY5U36TQrXHUtyDWNwsxS5cutcjISPvP//xP27lzp91yyy0WGxtrJSUlwZ6aY9SoUbZo0SLbsWOHbdu2zX76059aWlqaHT161Blz2WWX2S233GJFRUXO5vf7nf6amhobOHCgZWVl2datW23VqlXWvXt3y8nJadO1zJ07184999yAeX755ZdO/2233Wapqam2evVq27x5s1100UV28cUXt7t1mJmVlpYGrCM3N9ck2dq1a82sfe+TVatW2b/+67/a8uXLTZKtWLEioH/BggUWExNjr732mn300Ud29dVXW3p6uh07dswZc+WVV9r5559v69evt/fee8/OOeccmzhxotPv9/stMTHRJk2aZDt27LCXXnrJoqKi7Nlnn22ztZSVlVlWVpa9/PLL9sknn1he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btalSxf7+c9/bkVFRe1uHfX+8Y9/mCTLz88PaG/v+2Tt2rWN/kxNnjzZzI7fRuG+++6zxMRE83q9dsUVVzRY46FDh2zixIkWHR1tPp/PpkyZYkeOHAkY89FHH9mll15qXq/XevToYQsWLGjTtezbt+97f3/q73W2ZcsWy8jIsJiYGOvcubP96Ec/sgcffNAqKirafC2tgfrWdjpafTMLzRpHfQteffOYmTXt2CEAAABCXUidEwgAAICWQQgEAABwIUIgAACACxECAQAAXIgQCAAA4EKEQAAAABciBAIAALgQIRAAAMCFCIEAAAAuRAgEAABwIUIgAACACxECAQAAXIgQCAAA4EKEQAAAABciBAIAALgQIRAAAMCFCIEAAAAuRAgEAABwIUIgTtnixYvl8Xga3e6+++5gT69FbNq0SdOmTdO5556rM844Q2lpabr++uv16aefNjp+9+7duvLKKxUdHa24uDjdcMMN+vLLL9t41gCayw31befOnRo/frx69+6tLl26qHv37hoxYoTeeOONRsdT3zq+iGBPAKFn3rx5Sk9PD2gbOHBgkGbTsv793/9d//znPzV+/Hidd955Ki4u1p///GddcMEFWr9+fcA6P//8c40YMUIxMTF68MEHdfToUf3xj3/U9u3btXHjRkVGRgZxJQBOR0eubwcOHNCRI0c0efJkpaSk6Ntvv9Xf/vY3XX311Xr22Wc1depUZyz1zSUMOEWLFi0ySbZp06ZTfsyxY8estra2FWfVsv75z39aZWVlQNunn35qXq/XJk2aFNB+++23W1RUlB04cMBpy83NNUn27LPPtsl8AbQMN9S3xtTU1Nj5559v/fr1C2invrkDbwejxbzzzjvyeDxaunSp7r33XvXo0UNdunRReXm5Dh8+rLvuukuDBg1SdHS0fD6fRo8erY8++qjR53jllVd0//33q0ePHuratauuu+46+f1+VVZWasaMGUpISFB0dLSmTJmiysrKBnNZsmSJhgwZoqioKMXFxelf/uVfVFhY+INruPjiixv8hdunTx+de+652r17d0D73/72N/3sZz9TWlqa05aVlaW+ffvqlVdeacp/OgDtXEeob40JDw9XamqqysrKAtqpb+7A28FoMr/fr6+++iqgrXv37s7Xf/jDHxQZGam77rpLlZWVioyM1K5du/Taa69p/PjxSk9PV0lJiZ599llddtll2rVrl1JSUgKeb/78+YqKitLdd9+tvXv36sknn1SnTp0UFhamr7/+Wr///e+1fv16LV68WOnp6ZozZ47z2AceeED33Xefrr/+ev3617/Wl19+qSeffFIjRozQ1q1bFRsb26T1mplKSkp07rnnOm0HDx5UaWmphg4d2mD8sGHDtGrVqia9BoD2wQ317ZtvvtGxY8fk9/v197//XW+++aYmTJjg9FPfXCTYhyIROurfLmlsMzNbu3atSbLevXvbt99+G/DYioqKBm+b7Nu3z7xer82bN89pq3+OgQMHWlVVldM+ceJE83g8Nnr06IDnyMzMtF69ejnf79+/38LDw+2BBx4IGLd9+3aLiIho0H4q/uu//ssk2XPPPee0bdq0ySTZX//61wbjZ82aZZKsoqKiya8FIDjcVN9uvfVWZ21hYWF23XXX2eHDh51+6pt7cCQQTfbUU0+pb9++39s/efJkRUVFBbR5vV7n69raWpWVlSk6Olr9+vXThx9+2OA5brzxRnXq1Mn5PiMjQy+99JJuuummgHEZGRl64oknVFNTo4iICC1fvlx1dXW6/vrrA/6aT0pKUp8+fbR27Vrdc889p7zWTz75RNnZ2crMzNTkyZOd9mPHjjVYV73OnTs7YxrrB9B+uaG+zZgxQ9ddd52++OILvfLKK6qtrVVVVZXTT31zD0IgmmzYsGGNvk1Q77tX1klSXV2dHn/8cT399NPat2+famtrnb74+PgG4088D0WSYmJiJEmpqakN2uvq6uT3+xUfH689e/bIzNSnT59G53Zi4f0hxcXFGjNmjGJiYvTqq68qPDzc6av/n0Bj5+tUVFQEjAEQOtxQ3/r376/+/ftLOh5IR44cqauuukobNmyQx+OhvrkIIRAtrrHi8OCDD+q+++7TTTfdpD/84Q+Ki4tTWFiYZsyYobq6ugbjTwxcp9JuZpKOF2OPx6M333yz0bHR0dGntAa/36/Ro0errKxM7733XoNzepKTkyVJRUVFDR5bVFSkuLg4/koGOqCOUN++67rrrtOtt96qTz/9VP369aO+uQghEG3i1Vdf1eWXX67nnnsuoL2srCzgpOvmOvvss2VmSk9PP+lbOidTUVGhq666Sp9++qnefvttDRgwoMGYHj166Mwzz9TmzZsb9G3cuFE//vGPT+u1AYSeUKpvjal/+9fv90ui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\n",
"text/plain": [
"<Figure size 640x480 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"# Create a list of frame numbers corresponding to each point\n",
"frame_numbers = queries[:,0].int().tolist()\n",
"\n",
"fig, axs = plt.subplots(2, 2)\n",
"axs = axs.flatten()\n",
"\n",
"for i, (query, frame_number) in enumerate(zip(queries, frame_numbers)):\n",
" ax = axs[i]\n",
" ax.plot(query[1].item(), query[2].item(), 'ro') \n",
" \n",
" ax.set_title(\"Frame {}\".format(frame_number))\n",
" ax.set_xlim(0, video.shape[4])\n",
" ax.set_ylim(0, video.shape[3])\n",
" ax.invert_yaxis()\n",
" \n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "aec7693b-9d74-48b3-b612-360290ff1e7a",
"metadata": {},
"source": [
"We pass these points as input to the model and track them:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "09008ca9-6a87-494f-8b05-6370cae6a600",
"metadata": {},
"outputs": [],
"source": [
"pred_tracks, __ = model(video, queries=queries[None])"
]
},
{
"cell_type": "markdown",
"id": "b00d2a35-3daf-482d-b40b-b6d4f548ca40",
"metadata": {},
"source": [
"Finally, we visualize the results with tracks leaving traces from the frame where the tracking starts.\n",
"Color encodes time:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "01467f8d-667c-4f41-b418-93132584c659",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Video saved to ./videos/queries_pred_track.mp4\n"
]
}
],
"source": [
"vis = Visualizer(\n",
" save_dir='./videos',\n",
" linewidth=6,\n",
" mode='cool',\n",
" tracks_leave_trace=-1\n",
")\n",
"vis.visualize(\n",
" video=video,\n",
" tracks=pred_tracks, \n",
" filename='queries');"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "fe23d210-ed90-49f1-8311-b7e354c7a9f6",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<video width=\"640\" height=\"480\" autoplay loop controls>\n",
" <source src=\"./videos/queries_pred_track.mp4\" type=\"video/mp4\">\n",
" </video>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"HTML(\"\"\"<video width=\"640\" height=\"480\" autoplay loop controls>\n",
" <source src=\"./videos/queries_pred_track.mp4\" type=\"video/mp4\">\n",
" </video>\"\"\")"
]
},
{
"cell_type": "markdown",
"id": "87f2a3b4-a8b3-4aeb-87d2-28f056c624ba",
"metadata": {},
"source": [
"## Points on a regular grid"
]
},
{
"cell_type": "markdown",
"id": "a9aac679-19f8-4b78-9cc9-d934c6f83b01",
"metadata": {},
"source": [
"### Tracking forward from the frame number x"
]
},
{
"cell_type": "markdown",
"id": "0aeabca9-cc34-4d0f-8b2d-e6a6f797cb20",
"metadata": {},
"source": [
"Let's now sample points on a regular grid and start tracking from the frame number 20 with a grid of 30\\*30. "
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "c880f3ca-cf42-4f64-9df6-a0e8de6561dc",
"metadata": {},
"outputs": [],
"source": [
"grid_size = 30\n",
"grid_query_frame = 20"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "3cd58820-7b23-469e-9b6d-5fa81257981f",
"metadata": {},
"outputs": [],
"source": [
"pred_tracks, __ = model(video, grid_size=grid_size, grid_query_frame=grid_query_frame)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "25a85a1d-dce0-4e6b-9f7a-aaf31ade0600",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Video saved to ./videos/grid_query_20_pred_track.mp4\n"
]
}
],
"source": [
"vis = Visualizer(save_dir='./videos', pad_value=100)\n",
"vis.visualize(\n",
" video=video,\n",
" tracks=pred_tracks, \n",
" filename='grid_query_20',\n",
" query_frame=grid_query_frame);"
]
},
{
"cell_type": "markdown",
"id": "ce0fb5b8-d249-4f4e-b59a-51b4f03972c4",
"metadata": {},
"source": [
"Notice that tracking starts only from points sampled on a frame in the middle of the video. This is different from the grid in the first example:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "f0b01d51-9222-472b-a714-188c38d83ad9",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<video width=\"640\" height=\"480\" autoplay loop controls>\n",
" <source src=\"./videos/grid_query_20_pred_track.mp4\" type=\"video/mp4\">\n",
" </video>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"HTML(\"\"\"<video width=\"640\" height=\"480\" autoplay loop controls>\n",
" <source src=\"./videos/grid_query_20_pred_track.mp4\" type=\"video/mp4\">\n",
" </video>\"\"\")"
]
},
{
"cell_type": "markdown",
"id": "10baad8f-0cb8-4118-9e69-3fb24575715c",
"metadata": {},
"source": [
"### Tracking forward **and backward** from the frame number x"
]
},
{
"cell_type": "markdown",
"id": "8409e2f7-9e4e-4228-b198-56a64e2260a7",
"metadata": {},
"source": [
"CoTracker is an online algorithm and tracks points only in one direction. However, we can also run it backward from the queried point to track in both directions: "
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "506233dc-1fb3-4a3c-b9eb-5cbd5df49128",
"metadata": {},
"outputs": [],
"source": [
"grid_size = 30\n",
"grid_query_frame = 20"
]
},
{
"cell_type": "markdown",
"id": "495b5fb4-9050-41fe-be98-d757916d0812",
"metadata": {},
"source": [
"Let's activate backward tracking:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "677cf34e-6c6a-49e3-a21b-f8a4f718f916",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Video saved to ./videos/grid_query_20_backward_pred_track.mp4\n"
]
}
],
"source": [
"pred_tracks, __ = model(video, grid_size=grid_size, grid_query_frame=grid_query_frame, backward_tracking=True)\n",
"vis.visualize(\n",
" video=video,\n",
" tracks=pred_tracks, \n",
" filename='grid_query_20_backward',\n",
" query_frame=grid_query_frame);"
]
},
{
"cell_type": "markdown",
"id": "585a0afa-2cfc-4a07-a6f0-f65924b9ebce",
"metadata": {},
"source": [
"As you can see, we are now tracking points queried in the middle from the first frame:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "c8d64ab0-7e92-4238-8e7d-178652fc409c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<video width=\"640\" height=\"480\" autoplay loop controls>\n",
" <source src=\"./videos/grid_query_20_backward_pred_track.mp4\" type=\"video/mp4\">\n",
" </video>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"HTML(\"\"\"<video width=\"640\" height=\"480\" autoplay loop controls>\n",
" <source src=\"./videos/grid_query_20_backward_pred_track.mp4\" type=\"video/mp4\">\n",
" </video>\"\"\")"
]
},
{
"cell_type": "markdown",
"id": "fb55fb01-6d8e-4e06-9346-8b2e9ef489c2",
"metadata": {},
"source": [
"## Regular grid + Segmentation mask"
]
},
{
"cell_type": "markdown",
"id": "e93a6b0a-b173-46fa-a6d2-1661ae6e6779",
"metadata": {},
"source": [
"Let's now sample points on a grid and filter them with a segmentation mask.\n",
"This allows us to track points sampled densely on an object because we consume less GPU memory."
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "b759548d-1eda-473e-9c90-99e5d3197e20",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from PIL import Image\n",
"grid_size = 120"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "14ae8a8b-fec7-40d1-b6f2-10e333b75db4",
"metadata": {},
"outputs": [],
"source": [
"input_mask = '../assets/apple_mask.png'\n",
"segm_mask = np.array(Image.open(input_mask))"
]
},
{
"cell_type": "markdown",
"id": "4e3a1520-64bf-4a0d-b6e9-639430e31940",
"metadata": {},
"source": [
"That's a segmentation mask for the first frame:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "4d2efd4e-22df-4833-b9a0-a0763d59ee22",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7ff13dd1c8e0>"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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RKNRAEA0GsW2bdvQ3d3t1GlsbEQoFMK0adO+8ecEAgGEQqGcQkRERGPYUS+dEZElS5bIm2++Kbt375Z33nlHampqpKysTLq7u0VEZNGiRVJRUSEbNmyQLVu2SDQalWg06ny/rusyffp0mTt3rrS1tcmrr74qJ510kixfvnwwzeAqHhYWFhYWljwuR7OKZ1AB5corr5QJEyaI3++Xk08+Wa688kr55JNPnOt9fX1yyy23yPjx46WwsFAuu+wy6ezszHmPzz77TObNmyfBYFDKyspkyZIlkslkBtMMBhQWFhYWFpY8LkcTUJSICPJMIpFAcXHxaDeDiIiIhiAejx9xugbP4iEiIiLXYUAhIiIi12FAISIiItdhQCEiIiLXYUAhIiIi12FAISIiItdhQCEiIiLXYUAhIiIi12FAISIiItdhQCEiIiLXYUAhIiIi12FAISIiItdhQCEiIiLXYUAhIiIi12FAISIiItdhQCEiIiLXYUAhIiIi12FAISIiItdhQCEiIiLXYUAhIiIi12FAISIiItdhQCEiIiLXYUAhIiIi12FAISIiItdhQCEiIiLXYUAhIiIi12FAISIiItdhQCEiIiLXGXRA2bt3L6666iqUlpYiGAyiqqoKW7Zsca6LCO655x5MmDABwWAQNTU12LVrV8577Nu3D/X19QiFQigpKcENN9yAAwcOfPe7ISIiojFhUAHlq6++wuzZs+Hz+fDKK69g586d+P3vf4/x48c7dR544AE89NBDeOSRR9DS0oJx48ahtrYWyWTSqVNfX48dO3agsbER69atw9tvv42bbrpp+O6KiIiI8psMwrJly+TCCy/8xuumaUokEpEHH3zQea2np0cCgYA888wzIiKyc+dOASCbN2926rzyyiuilJK9e/ceVTvi8bgAYGFhYWFhYcnDEo/Hj/hZP6gRlJdeegmzZs3CFVdcgfLycsyYMQOPPfaYc3337t2IxWKoqalxXisuLkZ1dTWam5sBAM3NzSgpKcGsWbOcOjU1NdA0DS0tLYf9ualUColEIqcQERHR2DWogPLpp59i9erVmDp1Kl577TXcfPPNuO222/Dkk08CAGKxGAAgHA7nfF84HHauxWIxlJeX51z3er048cQTnToHW7lyJYqLi50yadKkwTSbiIiI8sygAoppmjj33HNx//33Y8aMGbjppptw44034pFH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wi6wZs0a8fv98ve//1127NghN954o5SUlEhXV9doN21U1NbWyuOPPy7bt2+XtrY2+fGPfywVFRVy4MABp86iRYtk0qRJ0tTUJFu2bJHzzz9fLrjgAue6rusyffp0qampka1bt8r69eulrKxMli9fPhq3NKI2bdokp556qpx99tmyePFi53X2Wa59+/bJ5MmT5dprr5WWlhb59NNP5bXXXpNPPvnEqbNq1SopLi6WF154Qd5//3255JJLZMqUKdLX1+fUufjii+Wcc86R9957T/7973/L9773PVmwYMFo3NKIWLFihZSWlsq6detk9+7dsnbtWikqKpI//elPTp3jvd/Wr18vd911lzz33HMCQJ5//vmc68PRP/F4XMLhsNTX18v27dvlmWeekWAwKH/9619H6jaH3bf1W09Pj9TU1Mg///lP+eijj6S5uVnOO+88mTlzZs57uL3f8i6gnHfeedLQ0OD82TAMmThxoqxcuXIUW+Ue3d3dAkDeeustEbF+UX0+n6xdu9ap8+GHHwoAaW5uFhHrF13TNInFYk6d1atXSygUklQqNbI3MIL2798vU6dOlcbGRvnRj37kBBT22aGWLVsmF1544TdeN01TIpGIPPjgg85rPT09EggE5JlnnhERkZ07dwoA2bx5s1PnlVdeEaWU7N2799g1fhTV1dXJ9ddfn/Pa5ZdfLvX19SLCfjvYwR+0w9U/Dz/8sIwfPz7n7+ayZcvkjDPOOMZ3NDIOF+wOtmnTJgEgn3/+uYjkR7/l1SOedDqN1tZW1NTUOK9pmoaamho0NzePYsvcIx6PA+g/ULG1tRWZTCanzyorK1FRUeH0WXNzM6qqqhAOh506tbW1SCQS2LFjxwi2fmQ1NDSgrq4up28A9tnhvPTSS5g1axauuOIKlJeXY8aMGXjsscec67t370YsFsvps+LiYlRXV+f0WUlJCWbNmuXUqampgaZpaGlpGbmbGUEXXHABmpqa8PHHHwMA3n//fWzcuBHz5s0DwH47kuHqn+bmZvzwhz+E3+936tTW1qK9vR1fffXVCN3N6IrH41BKoaSkBEB+9FteHRb4v//9D4Zh5HwoAEA4HMZHH300Sq1yD9M0cfvtt2P27NmYPn06ACAWi8Hv9zu/lFnhcBixWMypc7g+zV4bi9asWYP//Oc/2Lx58yHX2GeH+vTTT7F69Wr84he/wK9+9Sts3rwZt912G/x+PxYuXOjc8+H6ZGCflZeX51z3er048cQTx2SfAcCdd96JRCKByspKeDweGIaBFStWoL6+HgDYb0cwXP0Ti8UwZcqUQ94je238+PHHpP1ukUwmsWzZMixYsMA5HDAf+i2vAgp9u4aGBmzfvh0bN24c7aa42p49e7B48WI0NjaioKBgtJuTF0zTxKxZs3D//fcDAGbMmIHt27fjkUcewcKFC0e5de717LPP4umnn8Y//vEPnHXWWWhra8Ptt9+OiRMnst9oRGQyGfzsZz+DiGD16tWj3ZxByatHPGVlZfB4PIespujq6kIkEhmlVrnDrbfeinXr1uGNN97AKaec4rweiUSQTqfR09OTU39gn0UikcP2afbaWNPa2oru7m6ce+658Hq98Hq9eOutt/DQQw/B6/UiHA6zzw4yYcIETJs2Lee1M888Ex0dHQD67/nb/m5GIhF0d3fnXNd1Hfv27RuTfQYAS5cuxZ133omf//znqKqqwtVXX4077rgDK1euBMB+O5Lh6p/j7e9rVjacfP7552hsbHRGT4D86Le8Cih+vx8zZ85EU1OT85ppmmhqakI0Gh3Flo0eEcGtt96K559/Hhs2bDhkOG7mzJnw+Xw5fdbe3o6Ojg6nz6LRKLZt25bzy5r9ZT74Q2ksmDNnDrZt24a2tjanzJo1C/X19c7X7LNcs2fPPmT5+scff4zJkycDAKZMmYJIJJLTZ4lEAi0tLTl91tPTg9bWVqfOhg0bYJomqqurR+AuRl5vby80LfefWY/HA9M0AbDfjmS4+icajeLtt99GJpNx6jQ2NuKMM84Ys493suFk165deP3111FaWppzPS/6bUSm4g6jNWvWSCAQkCeeeEJ27twpN910k5SUlOSspjie3HzzzVJcXCxvvvmmdHZ2OqW3t9eps2jRIqmoqJANGzbIli1bJBqNSjQada5nl8zOnTtX2tra5NVXX5WTTjppzC6ZPZyBq3hE2GcH27Rpk3i9XlmxYoXs2rVLnn76aSksLJSnnnrKqbNq1SopKSmRF198UT744AO59NJLD7scdMaMGdLS0iIbN26UqVOnjpnlsoezcOFCOfnkk51lxs8995yUlZXJL3/5S6fO8d5v+/fvl61bt8rWrVsFgPzhD3+QrVu3OqtNhqN/enp6JBwOy9VXXy3bt2+XNWvWSGFhYV4vM/62fkun03LJJZfIKaecIm1tbTmfDQNX5Li93/IuoIiI/PnPf5aKigrx+/1y3nnnyXvvvTfaTRo1AA5bHn/8cadOX1+f3HLLLTJ+/HgpLCyUyy67TDo7O3Pe57PPPpN58+ZJMBiUsrIyWbJkiWQymRG+m9FzcEBhnx3q5ZdflunTp0sgEJDKykp59NFHc66bpil33323hMNhCQQCMmfOHGlvb8+p8+WXX8qCBQukqKhIQqGQXHfddbJ///6RvI0RlUgkZPHixVJRUSEFBQVy2mmnyV133ZXzIXG899sbb7xx2H/DFi5cKCLD1z/vv/++XHjhhRIIBOTkk0+WVatWjdQtHhPf1m+7d+/+xs+GN954w3kPt/ebEhmwpSERERGRC+TVHBQiIiI6PjCgEBERkeswoBAREZHrMKAQERGR6zCgEBERkeswoBAREZHrMKAQERGR6zCgEBERkeswoBAREZHrMKAQERGR6zCgEBERkeswoBAREZHr/D8Mvs7zbf+OwQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.imshow((segm_mask[...,None]/255.*video[0,0].permute(1,2,0).cpu().numpy()/255.))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "b42dce24-7952-4660-8298-4c362d6913cf",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Video saved to ./videos/segm_grid_pred_track.mp4\n"
]
}
],
"source": [
"pred_tracks, __ = model(video, grid_size=grid_size, segm_mask=torch.from_numpy(segm_mask)[None, None])\n",
"vis = Visualizer(\n",
" save_dir='./videos',\n",
" pad_value=100,\n",
" linewidth=2,\n",
")\n",
"vis.visualize(\n",
" video=video,\n",
" tracks=pred_tracks, \n",
" filename='segm_grid');"
]
},
{
"cell_type": "markdown",
"id": "5a386308-0d20-4ba3-bbb9-98ea79823a47",
"metadata": {},
"source": [
"We are now only tracking points on the object (and around):"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "1810440f-00f4-488a-a174-36be05949e42",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<video width=\"640\" height=\"480\" autoplay loop controls>\n",
" <source src=\"./videos/segm_grid_pred_track.mp4\" type=\"video/mp4\">\n",
" </video>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"HTML(\"\"\"<video width=\"640\" height=\"480\" autoplay loop controls>\n",
" <source src=\"./videos/segm_grid_pred_track.mp4\" type=\"video/mp4\">\n",
" </video>\"\"\")"
]
},
{
"cell_type": "markdown",
"id": "a63e89e4-8890-4e1b-91ec-d5dfa3f93309",
"metadata": {},
"source": [
"## Dense Tracks"
]
},
{
"cell_type": "markdown",
"id": "4ae764d8-db7c-41c2-a712-1876e7b4372d",
"metadata": {},
"source": [
"### Tracking forward **and backward** from the frame number x"
]
},
{
"cell_type": "markdown",
"id": "0dde3237-ecad-4c9b-b100-28b1f1b3cbe6",
"metadata": {},
"source": [
"CoTracker also has a mode to track **every pixel** in a video in a **dense** manner but it is much slower than in previous examples. Let's downsample the video in order to make it faster: "
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "379557d9-80ea-4316-91df-4da215193b41",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([1, 48, 3, 719, 1282])"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"video.shape"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "c6db5cc7-351d-4d9e-9b9d-3a40f05b077a",
"metadata": {},
"outputs": [],
"source": [
"import torch.nn.functional as F\n",
"video_interp = F.interpolate(video[0], [100,180], mode=\"bilinear\")[None].cuda()"
]
},
{
"cell_type": "markdown",
"id": "7ba32cb3-97dc-46f5-b2bd-b93a094dc819",
"metadata": {},
"source": [
"The video now has a much lower resolution:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "0918f246-5556-43b8-9f6d-88013d5a487e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([1, 48, 3, 100, 180])"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"video_interp.shape"
]
},
{
"cell_type": "markdown",
"id": "bc7d3a2c-5e87-4c8d-ad10-1f9c6d2ffbed",
"metadata": {},
"source": [
"Again, let's track points in both directions. This will only take a couple of minutes:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "3b852606-5229-4abd-b166-496d35da1009",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 9/9 [02:07<00:00, 14.18s/it]\n"
]
}
],
"source": [
"pred_tracks, __ = model(video_interp, grid_query_frame=20, backward_tracking=True)\n"
]
},
{
"cell_type": "markdown",
"id": "4143ab14-810e-4e65-93f1-5775957cf4da",
"metadata": {},
"source": [
"Visualization with an optical flow color encoding:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "5394b0ba-1fc7-4843-91d5-6113a6e86bdf",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Video saved to ./videos/dense_pred_track.mp4\n"
]
}
],
"source": [
"vis = Visualizer(\n",
" save_dir='./videos',\n",
" pad_value=20,\n",
" linewidth=1,\n",
" mode='optical_flow'\n",
")\n",
"vis.visualize(\n",
" video=video_interp,\n",
" tracks=pred_tracks, \n",
" query_frame=grid_query_frame,\n",
" filename='dense');"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "9113c2ac-4d25-4ef2-8951-71a1c1be74dd",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<video width=\"320\" height=\"240\" autoplay loop controls>\n",
" <source src=\"./videos/dense_pred_track.mp4\" type=\"video/mp4\">\n",
" </video>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"HTML(\"\"\"<video width=\"320\" height=\"240\" autoplay loop controls>\n",
" <source src=\"./videos/dense_pred_track.mp4\" type=\"video/mp4\">\n",
" </video>\"\"\")"
]
},
{
"cell_type": "markdown",
"id": "95e9bce0-382b-4d18-9316-7f92093ada1d",
"metadata": {},
"source": [
"That's all, now you can use CoTracker in your projects!"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "54e0ba0c-b532-46a9-af6f-9508de689dd2",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "stereoformer",
"language": "python",
"name": "stereoformer"
},
"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.8.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}