{ "cells": [ { "cell_type": "markdown", "id": "2780fd26", "metadata": {}, "source": [ "# Using custom labelling schemes" ] }, { "cell_type": "markdown", "id": "874e3ada", "metadata": {}, "source": [ "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/lucasmiranda42/deepof/blob/master/docs/source/tutorial_notebooks/deepof_custom_labels_tutorial.ipynb)" ] }, { "cell_type": "markdown", "id": "b059b912", "metadata": {}, "source": [ "##### What we'll cover:\n", " \n", "* Labelling schemes supported by DeepOF.\n", "* How to create a new labelling scheme and integrate it with the unsupervised pipeline." ] }, { "cell_type": "code", "execution_count": 1, "id": "998be631", "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "id": "25ccbea4", "metadata": {}, "outputs": [], "source": [ "# # If using Google colab, uncomment and run this cell and the one below to set up the environment\n", "# # Note: becasuse of how colab handles the installation of local packages, this cell will kill your runtime.\n", "# # This is not an error! Just continue with the cells below.\n", "# import os\n", "# !git clone -q https://github.com/mlfpm/deepof.git\n", "# !pip install -q -e deepof --progress-bar off\n", "# os.chdir(\"deepof\")\n", "# !curl --output tutorial_files.zip https://datashare.mpcdf.mpg.de/s/knF7t78isQuIAr0/download\n", "# !unzip tutorial_files.zip\n", "# os.kill(os.getpid(), 9)" ] }, { "cell_type": "code", "execution_count": 3, "id": "80e4b2fc", "metadata": {}, "outputs": [], "source": [ "# os.chdir(\"deepof\")\n", "# import os, warnings\n", "# warnings.filterwarnings('ignore')" ] }, { "cell_type": "markdown", "id": "7632cba8", "metadata": {}, "source": [ "Let's start by importing some packages. We'll use python's os library to handle paths, pickle to load saved objects, pandas to load data frames, and the data entry API within DeepOF, located in deepof.data" ] }, { "cell_type": "code", "execution_count": 4, "id": "4d85f5bf", "metadata": { "scrolled": false }, "outputs": [], "source": [ "import os\n", "import pandas as pd\n", "import pickle\n", "import deepof.data" ] }, { "cell_type": "markdown", "id": "ffdcefa1", "metadata": {}, "source": [ "We'll also need some plotting gear:" ] }, { "cell_type": "code", "execution_count": 5, "id": "e438d39f", "metadata": {}, "outputs": [], "source": [ "from IPython import display\n", "from networkx import Graph, draw\n", "import deepof.visuals\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "markdown", "id": "983af8b4", "metadata": {}, "source": [ "### Recap: labelling schemes supported by DeepOF" ] }, { "cell_type": "markdown", "id": "9c41de92", "metadata": {}, "source": [ "DeepOF supports two labelling schemes out of the box: the `deepof_14` scheme, selected by default, and `deepof_8`, a reduced set of tracking labels that is common among, for example, [SimBA](https://goldenneurolab.com/simba) users.\n", "\n", "**NOTE**: This is not necessary if you use the matrix representations introduced in the previous tutorial. If you'd like to try out the graph representations we explored, however, but you have a different labelling scheme, this is the place to be." ] }, { "cell_type": "markdown", "id": "2e2d3ae5", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "id": "0a3c0b08", "metadata": {}, "source": [ "While, as mentioned above, `deepof_14` is selected by default, the provided alternative can be selected when defining a new `deepof.Project` instance:" ] }, { "cell_type": "code", "execution_count": 6, "id": "7abae556", "metadata": {}, "outputs": [], "source": [ "my_deepof_project = deepof.data.Project(\n", " project_path=os.path.join(\"tutorial_files\"),\n", " video_path=os.path.join(\"tutorial_files/Videos/\"),\n", " table_path=os.path.join(\"tutorial_files/Tables/\"),\n", " project_name=\"deepof_tutorial_project\",\n", " arena=\"circular-autodetect\",\n", " animal_ids=[\"B\", \"W\"],\n", " video_format=\".mp4\",\n", " bodypart_graph=\"deepof_8\", # Can also be set to 'deepof_14' (default), or take a custom graph\n", " video_scale=380,\n", " enable_iterative_imputation=True,\n", " smooth_alpha=1,\n", " exp_conditions=None,\n", ")" ] }, { "cell_type": "code", "execution_count": 7, "id": "94d8c03b", "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Setting up project directories...\n", "Loading trajectories...\n", "Smoothing trajectories...\n", "Interpolating outliers...\n", "Iterative imputation of ocluded bodyparts...\n", "Detecting arena...\n", "Computing distances...\n", "Computing angles...\n", "Computing areas...\n", "Done!\n" ] } ], "source": [ "my_deepof_project = my_deepof_project.create(force=True)" ] }, { "cell_type": "markdown", "id": "65393407", "metadata": {}, "source": [ "We can take a look at the constructed graph in this case (you can see how the default looks like in the previous tutorial, or change the labelling scheme to `deepof_14` in the cell above if you're following in colab):" ] }, { "cell_type": "code", "execution_count": 9, "id": "630bd119", "metadata": {}, "outputs": [], "source": [ "graph_preprocessed_coords, adj_matrix, to_preprocess, global_scaler = my_deepof_project.get_graph_dataset(\n", " animal_id=\"B\", # Comment out for multi-animal embeddings\n", " center=\"Center\",\n", " align=\"Spine_1\",\n", " window_size=25,\n", " window_step=1,\n", " test_videos=1,\n", " preprocess=True,\n", " scale=\"standard\",\n", ")" ] }, { "cell_type": "code", "execution_count": 10, "id": "eeada2e4", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(3, 3))\n", "draw(Graph(adj_matrix))\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "caa71e54", "metadata": {}, "source": [ "We indeed see a graph with 8 labels! The diamond shape corresponds to nose, ears and center. The outer branches to both sides and the tail." ] }, { "cell_type": "markdown", "id": "6c99ef3c", "metadata": {}, "source": [ "This will adapt the whole downstream pipeline to work with the 8-label scheme. A more flexible alternative, if neither scheme fits your data, is to create a custom graph. Next, let's see how this can be achieved!" ] }, { "cell_type": "markdown", "id": "7079cbfb", "metadata": {}, "source": [ "### Creating a new labelling scheme" ] }, { "cell_type": "markdown", "id": "73f40230", "metadata": {}, "source": [ "Now, on for a slightly more involved task. What happens if we want another labelling scheme, not supported by DeepOF? We need to build the graph by hand using an adjacency list, and pass it to the `deepof.Project` constructor. Let's see! We'll adapt the `deepof_8` labelling scheme to include the full tail, which should look like this:" ] }, { "cell_type": "markdown", "id": "4e3b370f", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "id": "557e1f2c", "metadata": {}, "source": [ "To start, we should create a Python dictionary specifying all connections we want. To be clear, keys in the dictionary will be connected to every element in the lists passed as values. There is no unique way of implementing this, so feel free to be creative! But an example that works is the following:" ] }, { "cell_type": "code", "execution_count": 11, "id": "0c4826a9", "metadata": {}, "outputs": [], "source": [ "deepof_custom = {\n", " \"Nose\": [\"Left_ear\", \"Right_ear\"],\n", " \"Center\": [\"Left_ear\", \"Right_ear\", \"Left_fhip\", \"Right_fhip\", \"Tail_base\"],\n", " \"Tail_base\": [\"Tail_1\"],\n", " \"Tail_1\": [\"Tail_2\"],\n", " \"Tail_2\": [\"Tail_tip\"],\n", "}" ] }, { "cell_type": "markdown", "id": "73a6284e", "metadata": {}, "source": [ "Here, `Nose` is connected to `Left_ear` and `Right_ear`, and so on. Next, we'll pass this structure to the `bodypart_graph` parameter in the `deepof.Project` constructor." ] }, { "cell_type": "code", "execution_count": 12, "id": "f9be8dbb", "metadata": {}, "outputs": [], "source": [ "my_deepof_project = deepof.data.Project(\n", " project_path=os.path.join(\"tutorial_files\"),\n", " video_path=os.path.join(\"tutorial_files/Videos/\"),\n", " table_path=os.path.join(\"tutorial_files/Tables/\"),\n", " project_name=\"deepof_tutorial_project\",\n", " arena=\"circular-autodetect\",\n", " animal_ids=[\"B\", \"W\"],\n", " video_format=\".mp4\",\n", " bodypart_graph=deepof_custom, # Can also be set to 'deepof_14' (default), or 'deepof_8'\n", " video_scale=380,\n", " enable_iterative_imputation=0,\n", " smooth_alpha=1,\n", " exp_conditions=None,\n", ")" ] }, { "cell_type": "code", "execution_count": 13, "id": "314be955", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Setting up project directories...\n", "Loading trajectories...\n", "Smoothing trajectories...\n", "Interpolating outliers...\n", "Detecting arena...\n", "Computing distances...\n", "Computing angles...\n", "Computing areas...\n", "Done!\n" ] } ], "source": [ "my_deepof_project = my_deepof_project.create(force=True)" ] }, { "cell_type": "markdown", "id": "5333813e", "metadata": {}, "source": [ "### Getting a custom graph dataset for the unsupervised pipeline" ] }, { "cell_type": "markdown", "id": "0b987573", "metadata": {}, "source": [ "Now everything works the same way as before! Let's then obtain a new graph dataset using this custom labelling scheme, and make sure the obtained graph matches our expectations:" ] }, { "cell_type": "code", "execution_count": 14, "id": "a1573968", "metadata": {}, "outputs": [], "source": [ "graph_preprocessed_coords, adj_matrix, to_preprocess, global_scaler = my_deepof_project.get_graph_dataset(\n", " animal_id=\"B\", # Comment out for multi-animal embeddings\n", " center=\"Center\",\n", " align=\"Spine_1\",\n", " window_size=25,\n", " window_step=1,\n", " test_videos=1,\n", " preprocess=True,\n", " scale=\"standard\",\n", ")" ] }, { "cell_type": "code", "execution_count": 15, "id": "ff935bfb", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(3, 3))\n", "draw(Graph(adj_matrix))\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "eb8ced0d", "metadata": {}, "source": [ "And that's it! Now you should be able to adapt the unsupervised pipeline within DeepOF to any labelling scheme of choice. Note that this should still work with bottom-up or side view videos." ] }, { "cell_type": "markdown", "id": "8ded862f", "metadata": {}, "source": [ "### Wrapping up" ] }, { "cell_type": "markdown", "id": "d4f08308", "metadata": {}, "source": [ "Thank you for making it until the end. This was a slightly more involved tutorial for those users that do not rely on top-down labels like those provided out of the box. Stay tuned for more content, and make sure to raise an [issue](https://github.com/mlfpm/deepof/issues) in our GitHub repository if you have any questions!" ] } ], "metadata": { "kernelspec": { "display_name": "deepof", "language": "python", "name": "deepof" }, "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.9.6" } }, "nbformat": 4, "nbformat_minor": 5 }