{ "cells": [ { "cell_type": "markdown", "id": "258b9f89", "metadata": { "id": "258b9f89" }, "source": [ "# MNIST TUTORIAL" ] }, { "cell_type": "markdown", "id": "420f41ca", "metadata": { "id": "420f41ca" }, "source": [ "\n", " \n", " \n", " \n", "
\n", " Run on Google Colab\n", " \n", " View source on GitHub\n", " \n", " Download notebook\n", "


" ] }, { "cell_type": "markdown", "id": "a0dcaceb", "metadata": { "id": "a0dcaceb" }, "source": [ "### Connect to EvaDB" ] }, { "cell_type": "code", "execution_count": 1, "id": "b6b7f61d", "metadata": { "id": "b6b7f61d", "outputId": "02090ea0-f53c-4874-9dd9-583c3fc38ba2", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m92.6/92.6 kB\u001b[0m \u001b[31m4.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m108.9/108.9 kB\u001b[0m \u001b[31m8.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m137.6/137.6 kB\u001b[0m \u001b[31m10.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m45.5/45.5 kB\u001b[0m \u001b[31m4.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m139.4/139.4 kB\u001b[0m \u001b[31m13.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.7/7.7 MB\u001b[0m \u001b[31m69.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m17.6/17.6 MB\u001b[0m \u001b[31m68.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.6/13.6 MB\u001b[0m \u001b[31m96.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m631.1/631.1 kB\u001b[0m \u001b[31m57.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.2/2.2 MB\u001b[0m \u001b[31m104.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m86.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m100.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.3/2.3 MB\u001b[0m \u001b[31m114.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m71.8/71.8 kB\u001b[0m \u001b[31m9.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m98.7/98.7 kB\u001b[0m \u001b[31m12.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m302.0/302.0 kB\u001b[0m \u001b[31m34.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m89.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.2/3.2 MB\u001b[0m \u001b[31m16.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.8/3.8 MB\u001b[0m \u001b[31m129.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m295.0/295.0 kB\u001b[0m \u001b[31m32.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25h Building wheel for evadb (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "Downloading: \"http://ml.cs.tsinghua.edu.cn/~chenxi/pytorch-models/mnist-b07bb66b.pth\" to /root/.cache/torch/hub/checkpoints/mnist-b07bb66b.pth\n", "100%|██████████| 1.03M/1.03M [00:01<00:00, 785kB/s]\n", "Downloading: \"https://download.pytorch.org/models/fasterrcnn_resnet50_fpn_coco-258fb6c6.pth\" to /root/.cache/torch/hub/checkpoints/fasterrcnn_resnet50_fpn_coco-258fb6c6.pth\n", "Downloading https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m.pt to 'yolov8m.pt'...\n", "100%|██████████| 49.7M/49.7M [00:00<00:00, 384MB/s]\n" ] } ], "source": [ "%pip install --quiet \"evadb[vision,notebook]\"\n", "import evadb\n", "cursor = evadb.connect().cursor()\n", "import warnings\n", "warnings.filterwarnings(\"ignore\")" ] }, { "cell_type": "markdown", "id": "fd554c08", "metadata": { "id": "fd554c08" }, "source": [ "### Download the video and load it into EvaDB" ] }, { "cell_type": "code", "execution_count": 2, "id": "c2fc6c0f", "metadata": { "id": "c2fc6c0f", "outputId": "1e245224-d38d-46b0-963f-72a6c8cb6257", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "--2023-10-11 05:12:09-- https://www.dropbox.com/s/yxljxz6zxoqu54v/mnist.mp4\n", "Resolving www.dropbox.com (www.dropbox.com)... 162.125.6.18, 2620:100:601c:18::a27d:612\n", "Connecting to www.dropbox.com (www.dropbox.com)|162.125.6.18|:443... connected.\n", "HTTP request sent, awaiting response... 302 Found\n", "Location: /s/raw/yxljxz6zxoqu54v/mnist.mp4 [following]\n", "--2023-10-11 05:12:09-- https://www.dropbox.com/s/raw/yxljxz6zxoqu54v/mnist.mp4\n", "Reusing existing connection to www.dropbox.com:443.\n", "HTTP request sent, awaiting response... 302 Found\n", "Location: https://uc5d315012c65bbcab4509062328.dl.dropboxusercontent.com/cd/0/inline/CFb7rISnXkQgn5WYgiiLFS4lmy1CfuXswVdZeVxK2RZIV7iHWjZy12Zzy1_SSEa_c6oIhNa10KmF-zaLyiy7buzqH_qnTS3kvFev0iF5ngZHp9ks1aofg--MU8NL8JUNtac_s3i6I1XJAeeYBBTuMqqi/file# [following]\n", "--2023-10-11 05:12:09-- https://uc5d315012c65bbcab4509062328.dl.dropboxusercontent.com/cd/0/inline/CFb7rISnXkQgn5WYgiiLFS4lmy1CfuXswVdZeVxK2RZIV7iHWjZy12Zzy1_SSEa_c6oIhNa10KmF-zaLyiy7buzqH_qnTS3kvFev0iF5ngZHp9ks1aofg--MU8NL8JUNtac_s3i6I1XJAeeYBBTuMqqi/file\n", "Resolving uc5d315012c65bbcab4509062328.dl.dropboxusercontent.com (uc5d315012c65bbcab4509062328.dl.dropboxusercontent.com)... 162.125.64.15, 2620:100:601c:15::a27d:60f\n", "Connecting to uc5d315012c65bbcab4509062328.dl.dropboxusercontent.com (uc5d315012c65bbcab4509062328.dl.dropboxusercontent.com)|162.125.64.15|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 62156 (61K) [video/mp4]\n", "Saving to: ‘mnist.mp4’\n", "\n", "mnist.mp4 100%[===================>] 60.70K --.-KB/s in 0.1s \n", "\n", "2023-10-11 05:12:10 (430 KB/s) - ‘mnist.mp4’ saved [62156/62156]\n", "\n" ] } ], "source": [ "# Getting MNIST as a video\n", "!wget -nc \"https://www.dropbox.com/s/yxljxz6zxoqu54v/mnist.mp4\"" ] }, { "cell_type": "code", "execution_count": 3, "id": "27acc80e-62ef-49f9-aa54-9aac321af75a", "metadata": { "id": "27acc80e-62ef-49f9-aa54-9aac321af75a", "outputId": "8a9804b0-5380-4611-ec54-59da96403c8e", "colab": { "base_uri": "https://localhost:8080/", "height": 80 } }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " 0\n", "0 Number of loaded VIDEO: 1" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0
0Number of loaded VIDEO: 1
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ] }, "metadata": {}, "execution_count": 3 } ], "source": [ "# Load the video into EvaDB\n", "cursor.query(\"DROP TABLE IF EXISTS MNISTVid\").df()\n", "cursor.query(\"LOAD VIDEO 'mnist.mp4' INTO MNISTVid\").df()" ] }, { "cell_type": "markdown", "id": "7bbd789e", "metadata": { "id": "7bbd789e" }, "source": [ "### Run the Image Classification Function over the video" ] }, { "cell_type": "code", "execution_count": 4, "id": "91bdcaca", "metadata": { "id": "91bdcaca" }, "outputs": [], "source": [ "# Run a query on video data\n", "query = cursor.query(\"\"\"\n", " SELECT data, MnistImageClassifier(data).label\n", " FROM MNISTVid\n", " WHERE id = 30 OR id = 50 OR id = 70 OR id = 0 OR id = 140\n", "\"\"\")\n", "response = query.df()" ] }, { "cell_type": "markdown", "id": "d81ed233", "metadata": { "id": "d81ed233" }, "source": [ "### Visualize output of query on the video" ] }, { "cell_type": "code", "execution_count": 5, "id": "d8f4f65d", "metadata": { "id": "d8f4f65d", "outputId": "9239c02e-7157-4d6f-9417-4ca2a6b68665", "colab": { "base_uri": "https://localhost:8080/", "height": 163 } }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": {} } ], "source": [ "# !pip install matplotlib\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "# create figure (fig), and array of axes (ax)\n", "fig, ax = plt.subplots(nrows=1, ncols=5, figsize=[6,8])\n", "\n", "for axi in ax.flat:\n", " idx = np.random.randint(len(response))\n", " img = response['data'].iloc[idx]\n", " label = response['label'].iloc[idx]\n", " axi.imshow(img)\n", "\n", " axi.set_title(f'label: {label}')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "405b1730", "metadata": { "id": "405b1730" }, "source": [ "### Drop the function if needed" ] }, { "cell_type": "code", "execution_count": 6, "id": "829ed2da", "metadata": { "id": "829ed2da", "outputId": "b0b65cfa-011f-468d-e356-5c93a945deee", "colab": { "base_uri": "https://localhost:8080/", "height": 80 } }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " 0\n", "0 Function MnistImageClassifier successfully dro..." ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0
0Function MnistImageClassifier successfully dro...
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ] }, "metadata": {}, "execution_count": 6 } ], "source": [ "cursor.query(\"DROP FUNCTION MnistImageClassifier\").df()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.5" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false }, "vscode": { "interpreter": { "hash": "292337e8e9747092192f4a1ef18b0951099c869b0f06eb7241460e1768f24923" } }, "colab": { "provenance": [] } }, "nbformat": 4, "nbformat_minor": 5 }