Skip to content

Instantly share code, notes, and snippets.

@calebrob6
Created June 4, 2023 20:32
Show Gist options
  • Save calebrob6/427512eaae6f373a429c769b8391ef40 to your computer and use it in GitHub Desktop.
Save calebrob6/427512eaae6f373a429c769b8391ef40 to your computer and use it in GitHub Desktop.
Plot how long inference and backpropagation steps take for a U-Net as a function of the number of classes.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import torch\n",
"import torch.nn as nn\n",
"import segmentation_models_pytorch as smp\n",
"from tqdm.notebook import tqdm\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import time\n",
"import torch.optim as optim\n",
"from numpy import polyfit"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"device = torch.device(\"cuda:0\")\n",
"criterion = nn.CrossEntropyLoss()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "a5323fc0f77141d28b2718127aeb9a68",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/25 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"20 0.08915581703186035 0.006999001356624025\n",
"40 0.09475312232971192 0.002056478655073468\n",
"60 0.09783670902252198 0.0013926249231563847\n",
"80 0.10109012126922608 0.002229318361452539\n",
"100 0.10586683750152588 0.00185596356632018\n",
"120 0.10596387386322022 0.002398825884291594\n",
"140 0.12127435207366943 0.0016488205761009363\n",
"160 0.1275723934173584 0.0012418827598712984\n",
"180 0.13206076622009277 0.0017583857545726425\n",
"200 0.13514981269836426 0.0015638243120844016\n",
"220 0.13813912868499756 0.001634163007377038\n",
"240 0.1402216672897339 0.0011315485421024998\n",
"260 0.1832258701324463 0.05859004723160491\n",
"280 0.14650993347167968 0.0017165110736168901\n",
"300 0.15093004703521729 0.0014567814719269846\n",
"320 0.14555819034576417 0.0030092876925029723\n",
"340 0.15107147693634032 0.003321300416517111\n",
"360 0.17644402980804444 0.017436851315585353\n",
"380 0.15709831714630126 0.003620791003514509\n",
"400 0.1590643882751465 0.004151207186103787\n",
"420 0.1637261390686035 0.003531650862788712\n",
"440 0.17462034225463868 0.010772465242110072\n",
"460 0.168062162399292 0.004489828939106871\n",
"480 0.16781163215637207 0.004528890855395451\n",
"500 0.18220915794372558 0.016113323857669237\n"
]
}
],
"source": [
"xs = np.arange(20, 501, 20)\n",
"ys = []\n",
"for num_classes in tqdm(xs):\n",
" model = smp.Unet(\n",
" encoder_name=\"resnet50\",\n",
" encoder_weights=\"imagenet\",\n",
" in_channels=3,\n",
" classes=num_classes\n",
" ).train().to(device)\n",
" optimizer = optim.Adam(model.parameters())\n",
" y = []\n",
" for i in range(11):\n",
" tic = time.time()\n",
" optimizer.zero_grad()\n",
" out = model(torch.rand(32, 3, 256, 256).to(device))\n",
" loss = criterion(out, torch.randint(0, num_classes, (32, 256, 256)).to(device))\n",
" loss.backward()\n",
" if i > 0:\n",
" y.append(time.time() - tic)\n",
" ys.append(y)\n",
" print(num_classes, np.mean(y), np.std(y))\n",
"ys = np.array(ys)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1000 0.25271785259246826 0.007840519383439442\n"
]
}
],
"source": [
"num_classes = 1000\n",
"model = smp.Unet(\n",
" encoder_name=\"resnet50\",\n",
" encoder_weights=\"imagenet\",\n",
" in_channels=3,\n",
" classes=num_classes\n",
").train().to(device)\n",
"optimizer = optim.Adam(model.parameters())\n",
"y_test = []\n",
"for i in range(11):\n",
" tic = time.time()\n",
" optimizer.zero_grad()\n",
" out = model(torch.rand(32, 3, 256, 256).to(device))\n",
" loss = criterion(out, torch.randint(0, num_classes, (32, 256, 256)).to(device))\n",
" loss.backward()\n",
" if i > 0:\n",
" y_test.append(time.time() - tic)\n",
"print(num_classes, np.mean(y_test), np.std(y_test))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"coefficients = polyfit(xs, np.mean(ys, axis=1), 1)\n",
"polynomial = np.poly1d(coefficients)\n",
"ys_hat = polynomial(xs)\n",
"r2 = np.corrcoef(np.mean(ys, axis=1), ys_hat)[0, 1] ** 2"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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czB//nz4+PggOjq6xvswGo145ZVX0LFjRyiVSgwYMABJSUmm/TKZDAcPHsQrr7wCmUyG5cuX13qelStXolu3blAqlejUqRNee+21Go81GAyYNWsWOnfuDEdHR/Ts2RNvvfWW2TG7du3C0KFD4ezsDA8PD9x11124fPkyAODIkSMYNWoUXF1d4ebmhoiICPzxxx+mz/72228YPnw4HB0dERwcjOeeew4lJSWm/e+++y66d+8OlUoFf39/PPLIIzW2k6i9YYBERHVSKBR4/fXX8fbbb+Pq1auNOtfPP/+M69ev49dff8Ubb7yBuLg4/OlPf4Knpyf27duHp59+Gk899VS167zwwgt4/vnncfjwYQwbNgwPPvggcnNzAQAFBQW49957MXDgQPzxxx9ISkpCVlYWHn30UbNzfPLJJ3BwcMCePXvw/vvv19i+t956C//617+wevVqHD16FNHR0XjooYdw7tw5AEBGRgb69OmD559/HhkZGVi4cGGN51myZAkSEhKwdOlSnDx5Eps2bYK/v3+NxxqNRnTs2BFffvklTp48iWXLluHFF1/EF198AQDQ6/WYMGECRowYgaNHjyIlJQVPPvmkqYtz6tSp6NixIw4cOICDBw9i8eLFsLe3ByBlu8aOHYtJkybh6NGj2Lx5M3777TfMmTMHAPDHH3/gueeewyuvvIIzZ84gKSkJ99xzz23/PxK1C4KIqBYxMTFi/PjxQggh7rjjDvH4448LIYTYunWrqPzjIy4uTvTv39/ss2+++aYICQkxO1dISIgwGAymbT179hTDhw83vdfr9cLZ2Vl8/vnnQgghLl68KACIhIQE0zE6nU507NhRrFixQgghxKuvvirGjBljdu0rV64IAOLMmTNCCCFGjBghBg4ceNv7DQoKEq+99prZtiFDhohnn33W9L5///4iLi6u1nOo1WqhVCrFRx99VOP+ins6fPhwreeYPXu2mDRpkhBCiNzcXAFA7Nq1q8ZjXV1dxYYNG2rcN2vWLPHkk0+abdu9e7eQy+WirKxMfPXVV8LNzU2o1epa20LUXjGDREQWWbFiBT755BOcOnWqwefo06cP5PJbP3b8/f0RHh5ueq9QKODt7Y3s7Gyzzw0bNsz0Zzs7OwwePNjUjiNHjmDnzp1wcXExvcLCwgBIGZQKERERdbZNrVbj+vXruOuuu8y233XXXfW651OnTkGj0WD06NEWf2bdunWIiIiAr68vXFxc8OGHHyI9PR0A4OXlhRkzZiA6OhoPPvgg3nrrLWRkZJg+Gxsbi7/97W+IiopCQkKC2T0fOXIEGzZsMHs20dHRMBqNuHjxIu677z6EhISgS5cumDZtGjZu3IjS0lKL203UljFAIiKL3HPPPYiOjsaSJUuq7ZPL5RBCmG3T6XTVjqvo+qkgk8lq3GY0Gi1uV3FxMR588EGkpqaavc6dO2fWXeTs7GzxORvD0dGxXscnJiZi4cKFmDVrFn788UekpqZi5syZZgPJ169fj5SUFNx5553YvHkzevTogd9//x2ANP7rxIkTeOCBB/Dzzz+jd+/e2Lp1KwDp2Tz11FNmz+XIkSM4d+4cunbtCldXVxw6dAiff/45AgMDsWzZMvTv3x8FBQVN9jyIWisGSERksYSEBPzvf/9DSkqK2XZfX19kZmaaBUlNuc5PRTAASGNyDh48iF69egEABg0ahBMnTiA0NBTdunUze9UnKHJzc0NQUBD27Nljtn3Pnj3o3bu3xefp3r07HB0dLV4CYM+ePbjzzjvx7LPPYuDAgejWrZtZFqjCwIEDsWTJEuzduxd9+/bFpk2bTPt69OiBBQsW4Mcff8TEiRNNA90HDRqEkydPVnsu3bp1g4ODAwApIxcVFYWVK1fi6NGjuHTpEn7++WeL75eorWKAREQWCw8Px9SpU7F27Vqz7SNHjsSNGzewcuVKpKWlYd26ddi2bVuTXXfdunXYunUrTp8+jdmzZyM/Px+PP/44AGD27NnIy8vDlClTcODAAaSlpWH79u2YOXMmDAZDva7zwgsvYMWKFdi8eTPOnDmDxYsXIzU1FfPmzbP4HCqVCosWLcLf//53fPrpp0hLS8Pvv/+Of//73zUe3717d/zxxx/Yvn07zp49i6VLl+LAgQOm/RcvXsSSJUuQkpKCy5cv48cff8S5c+fQq1cvlJWVYc6cOdi1axcuX76MPXv24MCBA6bgcdGiRdi7dy/mzJljyqp98803pkHa3333HdauXYvU1FRcvnwZn376KYxGI3r27Fmv50bUFtlZuwFE1Lq88sor2Lx5s9m2Xr164d1338Xrr7+OV199FZMmTcLChQvx4YcfNsk1ExISkJCQgNTUVHTr1g3ffvstfHx8AMCU9Vm0aBHGjBkDjUaDkJAQjB071my8kyWee+45FBYW4vnnn0d2djZ69+6Nb7/9Ft27d6/XeZYuXQo7OzssW7YM169fR2BgIJ5++ukaj33qqadw+PBhTJ48GTKZDFOmTMGzzz5rCjCdnJxw+vRpfPLJJ8jNzUVgYCBmz56Np556Cnq9Hrm5uZg+fTqysrLg4+ODiRMn4uWXXwYA9OvXD7/88gteeuklDB8+HEIIdO3aFZMnTwYAeHh4YMuWLVi+fDnKy8vRvXt3fP755+jTp0+97peoLZKJqgMHiIiIiNo5drERERERVcEAiYiIiKgKBkhEREREVTBAIiIiIqqCARIRERFRFQyQiIiIiKpggERERERUBQMkIiIioioYIBERERFVwQCJiIiIqAoGSERERERV/D+mXY+h+Iq6EgAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure()\n",
"plt.plot(xs, ys.mean(axis=1))\n",
"plt.fill_between(xs, ys.mean(axis=1) - ys.std(axis=1), ys.mean(axis=1) + ys.std(axis=1), alpha=0.3)\n",
"\n",
"plt.plot(np.arange(20, 1001, 20), polynomial(np.arange(20, 1001, 20)), color=\"red\", label=f\"Linear fit (R2={r2:.2f})\")\n",
"plt.scatter(1000, np.mean(y_test), color=\"black\", label=\"Test time\")\n",
"\n",
"plt.xlabel(\"Number of classes\")\n",
"plt.ylabel(\"Time (s)\")\n",
"\n",
"plt.legend()\n",
"\n",
"plt.show()\n",
"plt.close()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "geospatiallib",
"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.11"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment