497 lines
56 KiB
Plaintext
497 lines
56 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "8ef5cd92",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%load_ext autoreload\n",
|
|
"%autoreload 2"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "78c4643a",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import os\n",
|
|
"import sys\n",
|
|
"import os.path as op\n",
|
|
"import pandas as pd\n",
|
|
"import json\n",
|
|
"import base64"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "ffba4333",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"sys.path.append(op.abspath('..'))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "5bc81f71",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"os.environ[\"CUBLAS_WORKSPACE_CONFIG\"] = \":16:8\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "3de8bcf2",
|
|
"metadata": {
|
|
"lines_to_next_cell": 0
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import torch\n",
|
|
"import multiprocessing\n",
|
|
"from itertools import chain\n",
|
|
"import numpy as np\n",
|
|
"import random"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "91a045ba",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from bokeh.io import output_notebook, output_file\n",
|
|
"from bokeh.plotting import figure, show\n",
|
|
"from bokeh.models import LinearColorMapper, ColumnDataSource\n",
|
|
"from bokeh.transform import factor_cmap, factor_mark\n",
|
|
"from torch.utils.data import DataLoader\n",
|
|
"\n",
|
|
"\n",
|
|
"from datasets import SLREmbeddingDataset, collate_fn_padd\n",
|
|
"from datasets.dataset_loader import LocalDatasetLoader\n",
|
|
"from models import embeddings_scatter_plot_splits\n",
|
|
"from models import SPOTER_EMBEDDINGS"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"id": "bc50c296",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<torch._C.Generator at 0x7fb861ca3df0>"
|
|
]
|
|
},
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"seed = 43\n",
|
|
"random.seed(seed)\n",
|
|
"np.random.seed(seed)\n",
|
|
"os.environ[\"PYTHONHASHSEED\"] = str(seed)\n",
|
|
"torch.manual_seed(seed)\n",
|
|
"torch.cuda.manual_seed(seed)\n",
|
|
"torch.cuda.manual_seed_all(seed)\n",
|
|
"torch.backends.cudnn.deterministic = True\n",
|
|
"torch.use_deterministic_algorithms(True) \n",
|
|
"generator = torch.Generator()\n",
|
|
"generator.manual_seed(seed)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"id": "82766a17",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"BASE_DATA_FOLDER = '../data/'\n",
|
|
"os.environ[\"BASE_DATA_FOLDER\"] = BASE_DATA_FOLDER\n",
|
|
"device = torch.device(\"cpu\")\n",
|
|
"if torch.cuda.is_available():\n",
|
|
" device = torch.device(\"cuda\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"id": "ead15a36",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<All keys matched successfully>"
|
|
]
|
|
},
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# LOAD MODEL FROM CLEARML\n",
|
|
"# from clearml import InputModel\n",
|
|
"# model = InputModel(model_id='1b736da469b04e91b8451d2342aef6ce')\n",
|
|
"# checkpoint = torch.load(model.get_weights())\n",
|
|
"\n",
|
|
"\n",
|
|
"CHECKPOINT_PATH = \"../checkpoints/checkpoint_embed_411.pth\"\n",
|
|
"checkpoint = torch.load(CHECKPOINT_PATH, map_location=device)\n",
|
|
"\n",
|
|
"\n",
|
|
"model = SPOTER_EMBEDDINGS(\n",
|
|
" features=checkpoint[\"config_args\"].vector_length,\n",
|
|
" hidden_dim=checkpoint[\"config_args\"].hidden_dim,\n",
|
|
" norm_emb=checkpoint[\"config_args\"].normalize_embeddings,\n",
|
|
").to(device)\n",
|
|
"\n",
|
|
"model.load_state_dict(checkpoint[\"state_dict\"])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"id": "20f8036d",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"SL_DATASET = 'fingerspelling' # or 'wlasl'\n",
|
|
"\n",
|
|
"if SL_DATASET == 'fingerspelling':\n",
|
|
" dataset_name = \"fingerspelling\"\n",
|
|
" split_dataset_path = \"{}.csv\"\n",
|
|
"elif SL_DATASET == 'wlasl':\n",
|
|
" dataset_name = \"wlasl\"\n",
|
|
" split_dataset_path = \"WLASL100_{}.csv\"\n",
|
|
"elif SL_DATASET == 'basic-signs':\n",
|
|
" dataset_name = \"basic-signs\"\n",
|
|
" split_dataset_path = \"{}.csv\"\n",
|
|
" "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"id": "758716b6",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def get_dataset_loader(loader_name=None):\n",
|
|
" if loader_name == 'CLEARML':\n",
|
|
" from datasets.clearml_dataset_loader import ClearMLDatasetLoader\n",
|
|
" return ClearMLDatasetLoader()\n",
|
|
" else:\n",
|
|
" return LocalDatasetLoader()\n",
|
|
"\n",
|
|
"dataset_loader = get_dataset_loader()\n",
|
|
"dataset_project = \"Sign Language Recognition\"\n",
|
|
"batch_size = 1\n",
|
|
"dataset_folder = dataset_loader.get_dataset_folder(dataset_project, dataset_name)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"id": "f1527959",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"/usr/local/lib/python3.8/dist-packages/sklearn/manifold/_t_sne.py:780: FutureWarning: The default initialization in TSNE will change from 'random' to 'pca' in 1.2.\n",
|
|
" warnings.warn(\n",
|
|
"/usr/local/lib/python3.8/dist-packages/sklearn/manifold/_t_sne.py:790: FutureWarning: The default learning rate in TSNE will change from 200.0 to 'auto' in 1.2.\n",
|
|
" warnings.warn(\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"dataloaders = {}\n",
|
|
"splits = ['train', 'val']\n",
|
|
"dfs = {}\n",
|
|
"for split in splits:\n",
|
|
" split_set_path = op.join(dataset_folder, split_dataset_path.format(split))\n",
|
|
" split_set = SLREmbeddingDataset(split_set_path, triplet=False)\n",
|
|
" data_loader = DataLoader(\n",
|
|
" split_set,\n",
|
|
" batch_size=batch_size,\n",
|
|
" shuffle=False,\n",
|
|
" collate_fn=collate_fn_padd,\n",
|
|
" pin_memory=torch.cuda.is_available(),\n",
|
|
" num_workers=multiprocessing.cpu_count()\n",
|
|
" )\n",
|
|
" dataloaders[split] = data_loader\n",
|
|
" dfs[split] = pd.read_csv(split_set_path)\n",
|
|
"\n",
|
|
"with open(op.join(dataset_folder, 'id_to_label.json')) as fid:\n",
|
|
" id_to_label = json.load(fid)\n",
|
|
"id_to_label = {int(key): value for key, value in id_to_label.items()}\n",
|
|
"\n",
|
|
"tsne_results, labels_results = embeddings_scatter_plot_splits(model,\n",
|
|
" dataloaders,\n",
|
|
" device,\n",
|
|
" id_to_label,\n",
|
|
" perplexity=40,\n",
|
|
" n_iter=1000)\n",
|
|
"\n",
|
|
"\n",
|
|
"set_labels = list(set(next(chain(labels_results.values()))))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"id": "3c3af5bf",
|
|
"metadata": {
|
|
"lines_to_next_cell": 0
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"743"
|
|
]
|
|
},
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"dfs = {}\n",
|
|
"for split in splits:\n",
|
|
" split_set_path = op.join(dataset_folder, split_dataset_path.format(split))\n",
|
|
" df = pd.read_csv(split_set_path)\n",
|
|
" df['tsne_x'] = tsne_results[split][:, 0]\n",
|
|
" df['tsne_y'] = tsne_results[split][:, 1]\n",
|
|
" df['split'] = split\n",
|
|
" # if SL_DATASET == 'wlasl':\n",
|
|
" # df['video_fn'] = df['video_id'].apply(lambda video_id: os.path.join(BASE_DATA_FOLDER, f'wlasl/videos/{video_id:05d}.mp4'))\n",
|
|
" # else:\n",
|
|
" # df['video_fn'] = df['video_id'].apply(lambda video_id: os.path.join(BASE_DATA_FOLDER, f'lsa/videos/{video_id}.mp4'))\n",
|
|
" dfs[split] = df\n",
|
|
"\n",
|
|
"df = pd.concat([dfs['train'], dfs['val']]).reset_index(drop=True)\n",
|
|
"len(df)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"id": "dccbe1b9",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from tqdm.auto import tqdm\n",
|
|
"\n",
|
|
"def load_videos(video_list):\n",
|
|
" print('loading videos')\n",
|
|
" videos = []\n",
|
|
" for video_fn in tqdm(video_list):\n",
|
|
" if video_fn is None:\n",
|
|
" video_data = None\n",
|
|
" else:\n",
|
|
" with open(video_fn, 'rb') as fid:\n",
|
|
" video_data = base64.b64encode(fid.read()).decode()\n",
|
|
" videos.append(video_data)\n",
|
|
" print('Done loading videos')\n",
|
|
" return videos"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"id": "904298f0",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"use_img_div = False\n",
|
|
"if use_img_div:\n",
|
|
" # sample dataframe data to avoid overloading scatter plot with too many videos\n",
|
|
" df = df.loc[(df['tsne_x'] > 10) & (df['tsne_x'] < 20)]\n",
|
|
" df = df.loc[(df['tsne_y'] > 10) & (df['tsne_y'] < 20)]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 25,
|
|
"id": "42832f7c",
|
|
"metadata": {
|
|
"scrolled": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div class=\"bk-root\">\n",
|
|
" <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
|
|
" <span id=\"1119\">Loading BokehJS ...</span>\n",
|
|
" </div>\n"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n // Clean up Bokeh references\n if (id != null && id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim();\n if (id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1119\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\nif (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1119\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));",
|
|
"application/vnd.bokehjs_load.v0+json": ""
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"img_div = '''\n",
|
|
" <div>\n",
|
|
" <video autoplay src=\"data:video/mp4;base64,@videos\" height=\"90\" width=\"120\">\n",
|
|
" </video>\n",
|
|
" </div>\n",
|
|
"'''\n",
|
|
"TOOLTIPS = f\"\"\"\n",
|
|
" <div>\n",
|
|
" {img_div if use_img_div else ''}\n",
|
|
" <div>\n",
|
|
" <span style=\"font-size: 17px; font-weight: bold;\">@label_desc - @split</span>\n",
|
|
" <span style=\"font-size: 15px; color: #966;\">[#@video_id]</span>\n",
|
|
" </div>\n",
|
|
" </div>\n",
|
|
" </div>\n",
|
|
"\"\"\"\n",
|
|
"\n",
|
|
"# get labels\n",
|
|
"labels = df['label_name'].values\n",
|
|
"# get unique labels\n",
|
|
"unique_labels = np.unique(labels)\n",
|
|
"cmap = LinearColorMapper(palette=\"Turbo256\", low=0, high=len(unique_labels))\n",
|
|
"\n",
|
|
"output_notebook()\n",
|
|
"# or \n",
|
|
"# output_file(\"scatter_plot.html\")\n",
|
|
"\n",
|
|
"p = figure(width=1000,\n",
|
|
" height=800,\n",
|
|
" tooltips=TOOLTIPS,\n",
|
|
" title=f\"Check {'video' if use_img_div else 'label'} by hovering mouse over the dots\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 26,
|
|
"id": "ead4daf7",
|
|
"metadata": {
|
|
"scrolled": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"\n",
|
|
" <div class=\"bk-root\" id=\"8aa5a5a3-57de-4695-bcff-8e64eb93f200\" data-root-id=\"1120\"></div>\n"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"27aecfdc-14bf-4fd5-928c-7f15b2ea73c6\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1131\"}],\"center\":[{\"id\":\"1134\"},{\"id\":\"1138\"},{\"id\":\"1172\"}],\"height\":800,\"left\":[{\"id\":\"1135\"}],\"renderers\":[{\"id\":\"1160\"}],\"title\":{\"id\":\"1121\"},\"toolbar\":{\"id\":\"1147\"},\"width\":1000,\"x_range\":{\"id\":\"1123\"},\"x_scale\":{\"id\":\"1127\"},\"y_range\":{\"id\":\"1125\"},\"y_scale\":{\"id\":\"1129\"}},\"id\":\"1120\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1164\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"field\":\"labels\",\"transform\":{\"id\":\"1118\"}},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"field\":\"labels\",\"transform\":{\"id\":\"1118\"}},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"field\":\"labels\",\"transform\":{\"id\":\"1118\"}},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1158\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1136\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1167\"},\"group\":null,\"major_label_policy\":{\"id\":\"1168\"},\"ticker\":{\"id\":\"1132\"}},\"id\":\"1131\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"field\":\"labels\",\"transform\":{\"id\":\"1118\"}},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"field\":\"labels\",\"transform\":{\"id\":\"1118\"}},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"field\":\"labels\",\"transform\":{\"id\":\"1118\"}},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1157\",\"type\":\"Scatter\"},{\"attributes\":{\"source\":{\"id\":\"1155\"}},\"id\":\"1161\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1155\"},\"glyph\":{\"id\":\"1157\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1159\"},\"nonselection_glyph\":{\"id\":\"1158\"},\"view\":{\"id\":\"1161\"}},\"id\":\"1160\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"1173\"}]},\"id\":\"1172\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"1132\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1167\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1145\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"field\":\"labels\",\"transform\":{\"id\":\"1118\"}},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"field\":\"labels\",\"transform\":{\"id\":\"1118\"}},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"field\":\"labels\",\"transform\":{\"id\":\"1118\"}},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1159\",\"type\":\"Scatter\"},{\"attributes\":{\"label\":{\"field\":\"label_desc\"},\"renderers\":[{\"id\":\"1160\"}]},\"id\":\"1173\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1170\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1125\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1127\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1129\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1169\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1144\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis\":{\"id\":\"1135\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1138\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1168\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1165\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"1131\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1134\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1139\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1123\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Check label by hovering mouse over the dots\"},\"id\":\"1121\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1140\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1139\"},{\"id\":\"1140\"},{\"id\":\"1141\"},{\"id\":\"1142\"},{\"id\":\"1143\"},{\"id\":\"1144\"},{\"id\":\"1146\"}]},\"id\":\"1147\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1142\",\"type\":\"SaveTool\"},{\"attributes\":{\"callback\":null,\"tooltips\":\"\\n <div>\\n \\n <div>\\n <span style=\\\"font-size: 17px; font-weight: bold;\\\">@label_desc - @split</span>\\n <span style=\\\"font-size: 15px; color: #966;\\\">[#@video_id]</span>\\n </div>\\n </div>\\n </div>\\n\"},\"id\":\"1146\",\"type\":\"HoverTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1145\"}},\"id\":\"1141\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"high\":26,\"low\":0,\"palette\":[\"#30123b\",\"#311542\",\"#32184a\",\"#341b51\",\"#351e58\",\"#36215f\",\"#372365\",\"#38266c\",\"#392972\",\"#3a2c79\",\"#3b2f7f\",\"#3c3285\",\"#3c358b\",\"#3d3791\",\"#3e3a96\",\"#3f3d9c\",\"#4040a1\",\"#4043a6\",\"#4145ab\",\"#4148b0\",\"#424bb5\",\"#434eba\",\"#4350be\",\"#4353c2\",\"#4456c7\",\"#4458cb\",\"#455bce\",\"#455ed2\",\"#4560d6\",\"#4563d9\",\"#4666dd\",\"#4668e0\",\"#466be3\",\"#466de6\",\"#4670e8\",\"#4673eb\",\"#4675ed\",\"#4678f0\",\"#467af2\",\"#467df4\",\"#467ff6\",\"#4682f8\",\"#4584f9\",\"#4587fb\",\"#4589fc\",\"#448cfd\",\"#438efd\",\"#4291fe\",\"#4193fe\",\"#4096fe\",\"#3f98fe\",\"#3e9bfe\",\"#3c9dfd\",\"#3ba0fc\",\"#39a2fc\",\"#38a5fb\",\"#36a8f9\",\"#34aaf8\",\"#33acf6\",\"#31aff5\",\"#2fb1f3\",\"#2db4f1\",\"#2bb6ef\",\"#2ab9ed\",\"#28bbeb\",\"#26bde9\",\"#25c0e6\",\"#23c2e4\",\"#21c4e1\",\"#20c6df\",\"#1ec9dc\",\"#1dcbda\",\"#1ccdd7\",\"#1bcfd4\",\"#1ad1d2\",\"#19d3cf\",\"#18d5cc\",\"#18d7ca\",\"#17d9c7\",\"#17dac4\",\"#17dcc2\",\"#17debf\",\"#18e0bd\",\"#18e1ba\",\"#19e3b8\",\"#1ae4b6\",\"#1be5b4\",\"#1de7b1\",\"#1ee8af\",\"#20e9ac\",\"#22eba9\",\"#24eca6\",\"#27eda3\",\"#29eea0\",\"#2cef9d\",\"#2ff09a\",\"#32f197\",\"#35f394\",\"#38f491\",\"#3bf48d\",\"#3ff58a\",\"#42f687\",\"#46f783\",\"#4af880\",\"#4df97c\",\"#51f979\",\"#55fa76\",\"#59fb72\",\"#5dfb6f\",\"#61fc6c\",\"#65fc68\",\"#69fd65\",\"#6dfd62\",\"#71fd5f\",\"#74fe5c\",\"#78fe59\",\"#7cfe56\",\"#80fe53\",\"#84fe50\",\"#87fe4d\",\"#8bfe4b\",\"#8efe48\",\"#92fe46\",\"#95fe44\",\"#98fe42\",\"#9bfd40\",\"#9efd3e\",\"#a1fc3d\",\"#a4fc3b\",\"#a6fb3a\",\"#a9fb39\",\"#acfa37\",\"#aef937\",\"#b1f836\",\"#b3f835\",\"#b6f735\",\"#b9f534\",\"#bbf434\",\"#bef334\",\"#c0f233\",\"#c3f133\",\"#c5ef33\",\"#c8ee33\",\"#caed33\",\"#cdeb34\",\"#cfea34\",\"#d1e834\",\"#d4e735\",\"#d6e535\",\"#d8e335\",\"#dae236\",\"#dde036\",\"#dfde36\",\"#e1dc37\",\"#e3da37\",\"#e5d838\",\"#e7d738\",\"#e8d538\",\"#ead339\",\"#ecd139\",\"#edcf39\",\"#efcd39\",\"#f0cb3a\",\"#f2c83a\",\"#f3c63a\",\"#f4c43a\",\"#f6c23a\",\"#f7c039\",\"#f8be39\",\"#f9bc39\",\"#f9ba38\",\"#fab737\",\"#fbb537\",\"#fbb336\",\"#fcb035\",\"#fcae34\",\"#fdab33\",\"#fda932\",\"#fda631\",\"#fda330\",\"#fea12f\",\"#fe9e2e\",\"#fe9b2d\",\"#fe982c\",\"#fd952b\",\"#fd9229\",\"#fd8f28\",\"#fd8c27\",\"#fc8926\",\"#fc8624\",\"#fb8323\",\"#fb8022\",\"#fa7d20\",\"#fa7a1f\",\"#f9771e\",\"#f8741c\",\"#f7711b\",\"#f76e1a\",\"#f66b18\",\"#f56817\",\"#f46516\",\"#f36315\",\"#f26014\",\"#f15d13\",\"#ef5a11\",\"#ee5810\",\"#ed550f\",\"#ec520e\",\"#ea500d\",\"#e94d0d\",\"#e84b0c\",\"#e6490b\",\"#e5460a\",\"#e3440a\",\"#e24209\",\"#e04008\",\"#de3e08\",\"#dd3c07\",\"#db3a07\",\"#d93806\",\"#d73606\",\"#d63405\",\"#d43205\",\"#d23005\",\"#d02f04\",\"#ce2d04\",\"#cb2b03\",\"#c92903\",\"#c72803\",\"#c52602\",\"#c32402\",\"#c02302\",\"#be2102\",\"#bb1f01\",\"#b91e01\",\"#b61c01\",\"#b41b01\",\"#b11901\",\"#ae1801\",\"#ac1601\",\"#a91501\",\"#a61401\",\"#a31201\",\"#a01101\",\"#9d1001\",\"#9a0e01\",\"#970d01\",\"#940c01\",\"#910b01\",\"#8e0a01\",\"#8b0901\",\"#870801\",\"#840701\",\"#810602\",\"#7d0502\",\"#7a0402\"]},\"id\":\"1118\",\"type\":\"LinearColorMapper\"},{\"attributes\":{\"data\":{\"label\":[8,9,6,23,5,7,3,4,20,24,17,16,21,3,4,18,12,16,16,7,19,22,1,24,14,13,15,13,16,12,16,22,24,25,5,0,1,0,8,2,6,19,17,0,4,21,12,23,6,25,23,4,25,13,3,3,10,3,20,20,11,20,12,2,17,5,18,10,18,1,8,14,11,2,3,0,14,5,2,7,0,14,3,16,0,17,24,15,13,25,6,6,6,2,16,15,9,18,6,12,7,22,2,12,25,4,2,3,23,7,4,10,0,11,16,25,20,9,19,1,19,11,0,22,25,0,19,13,18,20,16,16,1,4,12,23,4,10,12,8,19,7,12,17,22,12,18,18,9,7,9,8,11,6,12,0,21,17,13,4,20,16,11,11,15,12,18,7,5,8,8,15,14,6,5,8,14,8,3,10,16,19,22,17,10,19,8,9,7,14,19,6,19,1,6,14,16,16,15,8,12,5,22,13,18,9,14,22,9,22,20,9,19,18,6,6,25,24,3,21,5,7,1,10,4,15,24,22,21,10,14,3,5,13,16,16,5,24,18,7,9,17,21,21,16,13,24,0,23,19,11,2,17,2,21,19,1,3,13,14,20,22,13,12,14,3,5,7,15,7,24,11,25,7,6,24,5,1,5,3,18,17,5,17,0,10,15,12,13,18,7,19,9,8,2,3,23,5,14,22,9,14,10,1,14,1,1,10,20,5,13,6,19,0,22,2,8,18,6,12,22,14,21,14,20,17,0,4,1,24,22,11,21,18,22,10,16,25,4,18,2,2,24,9,0,24,0,13,23,3,10,23,1,8,23,25,22,0,10,21,12,17,10,19,0,0,13,8,16,23,16,9,18,0,0,17,17,5,22,22,7,11,15,4,19,11,13,0,15,19,1,14,4,15,2,25,9,4,1,19,25,2,13,9,23,20,1,15,0,10,20,23,14,24,0,14,7,3,25,12,18,20,5,2,6,3,6,19,15,8,12,20,21,16,20,0,17,25,23,15,7,6,21,4,16,10,1,10,5,9,25,2,11,23,2,15,12,14,22,7,5,17,12,5,3,23,4,11,1,21,7,11,13,20,23,15,15,12,15,3,23,13,10,11,8,18,4,19,3,2,17,15,10,9,18,13,11,4,18,13,25,9,21,17,10,2,23,12,13,17,11,4,19,11,6,2,3,15,1,22,20,20,2,0,20,3,3,6,3,20,0,19,21,23,18,17,23,4,4,20,9,2,12,7,10,10,6,2,16,4,0,11,10,0,20,11,17,1,7,16,25,13,24,10,16,15,5,16,23,17,12,12,22,8,24,23,1,8,1,6,2,23,3,20,22,25,23,7,11,12,3,0,10,16,17,0,6,11,5,10,18,17,17,14,23,16,22,5,6,24,2,21,20,9,3,7,19,21,8,18,20,22,10,4,18,13,9,25,22,2,19,15,20,11,25,8,25,20,8,23,7,16,13,5,0,9,18,1,19,12,0,3,7,3,14,18,15,10,13,20,17,1,3,4,4,13,5,21,2,9,9,19,11,12,14,20,7,3,0,14,14,2,15,9,13,2,4,0,1,15,15,17,7,23,10,2,14,11,13,6,18,4,0,2,18,15,17,1,19,5,17,0,10,3,4,24,16,14,19,11,19,21,22,9,0,6,18,22,19,5,16,3,10,11,12,4,21,0,12,12,6,8,6],\"label_desc\":[\"W\",\"Y\",\"I\",\"V\",\"G\",\"J\",\"O\",\"S\",\"Z\",\"P\",\"F\",\"M\",\"X\",\"O\",\"S\",\"Q\",\"E\",\"M\",\"M\",\"J\",\"L\",\"U\",\"D\",\"P\",\"K\",\"T\",\"R\",\"T\",\"M\",\"E\",\"M\",\"U\",\"P\",\"A\",\"G\",\"B\",\"D\",\"B\",\"W\",\"N\",\"I\",\"L\",\"F\",\"B\",\"S\",\"X\",\"E\",\"V\",\"I\",\"A\",\"V\",\"S\",\"A\",\"T\",\"O\",\"O\",\"C\",\"O\",\"Z\",\"Z\",\"H\",\"Z\",\"E\",\"N\",\"F\",\"G\",\"Q\",\"C\",\"Q\",\"D\",\"W\",\"K\",\"H\",\"N\",\"O\",\"B\",\"K\",\"G\",\"N\",\"J\",\"B\",\"K\",\"O\",\"M\",\"B\",\"F\",\"P\",\"R\",\"T\",\"A\",\"I\",\"I\",\"I\",\"N\",\"M\",\"R\",\"Y\",\"Q\",\"I\",\"E\",\"J\",\"U\",\"N\",\"E\",\"A\",\"S\",\"N\",\"O\",\"V\",\"J\",\"S\",\"C\",\"B\",\"H\",\"M\",\"A\",\"Z\",\"Y\",\"L\",\"D\",\"L\",\"H\",\"B\",\"U\",\"A\",\"B\",\"L\",\"T\",\"Q\",\"Z\",\"M\",\"M\",\"D\",\"S\",\"E\",\"V\",\"S\",\"C\",\"E\",\"W\",\"L\",\"J\",\"E\",\"F\",\"U\",\"E\",\"Q\",\"Q\",\"Y\",\"J\",\"Y\",\"W\",\"H\",\"I\",\"E\",\"B\",\"X\",\"F\",\"T\",\"S\",\"Z\",\"M\",\"H\",\"H\",\"R\",\"E\",\"Q\",\"J\",\"G\",\"W\",\"W\",\"R\",\"K\",\"I\",\"G\",\"W\",\"K\",\"W\",\"O\",\"C\",\"M\",\"L\",\"U\",\"F\",\"C\",\"L\",\"W\",\"Y\",\"J\",\"K\",\"L\",\"I\",\"L\",\"D\",\"I\",\"K\",\"M\",\"M\",\"R\",\"W\",\"E\",\"G\",\"U\",\"T\",\"Q\",\"Y\",\"K\",\"U\",\"Y\",\"U\",\"Z\",\"Y\",\"L\",\"Q\",\"I\",\"I\",\"A\",\"P\",\"O\",\"X\",\"G\",\"J\",\"D\",\"C\",\"S\",\"R\",\"P\",\"U\",\"X\",\"C\",\"K\",\"O\",\"G\",\"T\",\"M\",\"M\",\"G\",\"P\",\"Q\",\"J\",\"Y\",\"F\",\"X\",\"X\",\"M\",\"T\",\"P\",\"B\",\"V\",\"L\",\"H\",\"N\",\"F\",\"N\",\"X\",\"L\",\"D\",\"O\",\"T\",\"K\",\"Z\",\"U\",\"T\",\"E\",\"K\",\"O\",\"G\",\"J\",\"R\",\"J\",\"P\",\"H\",\"A\",\"J\",\"I\",\"P\",\"G\",\"D\",\"G\",\"O\",\"Q\",\"F\",\"G\",\"F\",\"B\",\"C\",\"R\",\"E\",\"T\",\"Q\",\"J\",\"L\",\"Y\",\"W\",\"N\",\"O\",\"V\",\"G\",\"K\",\"U\",\"Y\",\"K\",\"C\",\"D\",\"K\",\"D\",\"D\",\"C\",\"Z\",\"G\",\"T\",\"I\",\"L\",\"B\",\"U\",\"N\",\"W\",\"Q\",\"I\",\"E\",\"U\",\"K\",\"X\",\"K\",\"Z\",\"F\",\"B\",\"S\",\"D\",\"P\",\"U\",\"H\",\"X\",\"Q\",\"U\",\"C\",\"M\",\"A\",\"S\",\"Q\",\"N\",\"N\",\"P\",\"Y\",\"B\",\"P\",\"B\",\"T\",\"V\",\"O\",\"C\",\"V\",\"D\",\"W\",\"V\",\"A\",\"U\",\"B\",\"C\",\"X\",\"E\",\"F\",\"C\",\"L\",\"B\",\"B\",\"T\",\"W\",\"M\",\"V\",\"M\",\"Y\",\"Q\",\"B\",\"B\",\"F\",\"F\",\"G\",\"U\",\"U\",\"J\",\"H\",\"R\",\"S\",\"L\",\"H\",\"T\",\"B\",\"R\",\"L\",\"D\",\"K\",\"S\",\"R\",\"N\",\"A\",\"Y\",\"S\",\"D\",\"L\",\"A\",\"N\",\"T\",\"Y\",\"V\",\"Z\",\"D\",\"R\",\"B\",\"C\",\"Z\",\"V\",\"K\",\"P\",\"B\",\"K\",\"J\",\"O\",\"A\",\"E\",\"Q\",\"Z\",\"G\",\"N\",\"I\",\"O\",\"I\",\"L\",\"R\",\"W\",\"E\",\"Z\",\"X\",\"M\",\"Z\",\"B\",\"F\",\"A\",\"V\",\"R\",\"J\",\"I\",\"X\",\"S\",\"M\",\"C\",\"D\",\"C\",\"G\",\"Y\",\"A\",\"N\",\"H\",\"V\",\"N\",\"R\",\"E\",\"K\",\"U\",\"J\",\"G\",\"F\",\"E\",\"G\",\"O\",\"V\",\"S\",\"H\",\"D\",\"X\",\"J\",\"H\",\"T\",\"Z\",\"V\",\"R\",\"R\",\"E\",\"R\",\"O\",\"V\",\"T\",\"C\",\"H\",\"W\",\"Q\",\"S\",\"L\",\"O\",\"N\",\"F\",\"R\",\"C\",\"Y\",\"Q\",\"T\",\"H\",\"S\",\"Q\",\"T\",\"A\",\"Y\",\"X\",\"F\",\"C\",\"N\",\"V\",\"E\",\"T\",\"F\",\"H\",\"S\",\"L\",\"H\",\"I\",\"N\",\"O\",\"R\",\"D\",\"U\",\"Z\",\"Z\",\"N\",\"B\",\"Z\",\"O\",\"O\",\"I\",\"O\",\"Z\",\"B\",\"L\",\"X\",\"V\",\"Q\",\"F\",\"V\",\"S\",\"S\",\"Z\",\"Y\",\"N\",\"E\",\"J\",\"C\",\"C\",\"I\",\"N\",\"M\",\"S\",\"B\",\"H\",\"C\",\"B\",\"Z\",\"H\",\"F\",\"D\",\"J\",\"M\",\"A\",\"T\",\"P\",\"C\",\"M\",\"R\",\"G\",\"M\",\"V\",\"F\",\"E\",\"E\",\"U\",\"W\",\"P\",\"V\",\"D\",\"W\",\"D\",\"I\",\"N\",\"V\",\"O\",\"Z\",\"U\",\"A\",\"V\",\"J\",\"H\",\"E\",\"O\",\"B\",\"C\",\"M\",\"F\",\"B\",\"I\",\"H\",\"G\",\"C\",\"Q\",\"F\",\"F\",\"K\",\"V\",\"M\",\"U\",\"G\",\"I\",\"P\",\"N\",\"X\",\"Z\",\"Y\",\"O\",\"J\",\"L\",\"X\",\"W\",\"Q\",\"Z\",\"U\",\"C\",\"S\",\"Q\",\"T\",\"Y\",\"A\",\"U\",\"N\",\"L\",\"R\",\"Z\",\"H\",\"A\",\"W\",\"A\",\"Z\",\"W\",\"V\",\"J\",\"M\",\"T\",\"G\",\"B\",\"Y\",\"Q\",\"D\",\"L\",\"E\",\"B\",\"O\",\"J\",\"O\",\"K\",\"Q\",\"R\",\"C\",\"T\",\"Z\",\"F\",\"D\",\"O\",\"S\",\"S\",\"T\",\"G\",\"X\",\"N\",\"Y\",\"Y\",\"L\",\"H\",\"E\",\"K\",\"Z\",\"J\",\"O\",\"B\",\"K\",\"K\",\"N\",\"R\",\"Y\",\"T\",\"N\",\"S\",\"B\",\"D\",\"R\",\"R\",\"F\",\"J\",\"V\",\"C\",\"N\",\"K\",\"H\",\"T\",\"I\",\"Q\",\"S\",\"B\",\"N\",\"Q\",\"R\",\"F\",\"D\",\"L\",\"G\",\"F\",\"B\",\"C\",\"O\",\"S\",\"P\",\"M\",\"K\",\"L\",\"H\",\"L\",\"X\",\"U\",\"Y\",\"B\",\"I\",\"Q\",\"U\",\"L\",\"G\",\"M\",\"O\",\"C\",\"H\",\"E\",\"S\",\"X\",\"B\",\"E\",\"E\",\"I\",\"W\",\"I\"],\"labels\":[8,9,6,23,5,7,3,4,20,24,17,16,21,3,4,18,12,16,16,7,19,22,1,24,14,13,15,13,16,12,16,22,24,25,5,0,1,0,8,2,6,19,17,0,4,21,12,23,6,25,23,4,25,13,3,3,10,3,20,20,11,20,12,2,17,5,18,10,18,1,8,14,11,2,3,0,14,5,2,7,0,14,3,16,0,17,24,15,13,25,6,6,6,2,16,15,9,18,6,12,7,22,2,12,25,4,2,3,23,7,4,10,0,11,16,25,20,9,19,1,19,11,0,22,25,0,19,13,18,20,16,16,1,4,12,23,4,10,12,8,19,7,12,17,22,12,18,18,9,7,9,8,11,6,12,0,21,17,13,4,20,16,11,11,15,12,18,7,5,8,8,15,14,6,5,8,14,8,3,10,16,19,22,17,10,19,8,9,7,14,19,6,19,1,6,14,16,16,15,8,12,5,22,13,18,9,14,22,9,22,20,9,19,18,6,6,25,24,3,21,5,7,1,10,4,15,24,22,21,10,14,3,5,13,16,16,5,24,18,7,9,17,21,21,16,13,24,0,23,19,11,2,17,2,21,19,1,3,13,14,20,22,13,12,14,3,5,7,15,7,24,11,25,7,6,24,5,1,5,3,18,17,5,17,0,10,15,12,13,18,7,19,9,8,2,3,23,5,14,22,9,14,10,1,14,1,1,10,20,5,13,6,19,0,22,2,8,18,6,12,22,14,21,14,20,17,0,4,1,24,22,11,21,18,22,10,16,25,4,18,2,2,24,9,0,24,0,13,23,3,10,23,1,8,23,25,22,0,10,21,12,17,10,19,0,0,13,8,16,23,16,9,18,0,0,17,17,5,22,22,7,11,15,4,19,11,13,0,15,19,1,14,4,15,2,25,9,4,1,19,25,2,13,9,23,20,1,15,0,10,20,23,14,24,0,14,7,3,25,12,18,20,5,2,6,3,6,19,15,8,12,20,21,16,20,0,17,25,23,15,7,6,21,4,16,10,1,10,5,9,25,2,11,23,2,15,12,14,22,7,5,17,12,5,3,23,4,11,1,21,7,11,13,20,23,15,15,12,15,3,23,13,10,11,8,18,4,19,3,2,17,15,10,9,18,13,11,4,18,13,25,9,21,17,10,2,23,12,13,17,11,4,19,11,6,2,3,15,1,22,20,20,2,0,20,3,3,6,3,20,0,19,21,23,18,17,23,4,4,20,9,2,12,7,10,10,6,2,16,4,0,11,10,0,20,11,17,1,7,16,25,13,24,10,16,15,5,16,23,17,12,12,22,8,24,23,1,8,1,6,2,23,3,20,22,25,23,7,11,12,3,0,10,16,17,0,6,11,5,10,18,17,17,14,23,16,22,5,6,24,2,21,20,9,3,7,19,21,8,18,20,22,10,4,18,13,9,25,22,2,19,15,20,11,25,8,25,20,8,23,7,16,13,5,0,9,18,1,19,12,0,3,7,3,14,18,15,10,13,20,17,1,3,4,4,13,5,21,2,9,9,19,11,12,14,20,7,3,0,14,14,2,15,9,13,2,4,0,1,15,15,17,7,23,10,2,14,11,13,6,18,4,0,2,18,15,17,1,19,5,17,0,10,3,4,24,16,14,19,11,19,21,22,9,0,6,18,22,19,5,16,3,10,11,12,4,21,0,12,12,6,8,6],\"split\":[\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"train\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\",\"val\"],\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[743]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[743]}},\"selected\":{\"id\":\"1170\"},\"selection_policy\":{\"id\":\"1169\"}},\"id\":\"1155\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1143\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1164\"},\"group\":null,\"major_label_policy\":{\"id\":\"1165\"},\"ticker\":{\"id\":\"1136\"}},\"id\":\"1135\",\"type\":\"LinearAxis\"}],\"root_ids\":[\"1120\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n const render_items = [{\"docid\":\"27aecfdc-14bf-4fd5-928c-7f15b2ea73c6\",\"root_ids\":[\"1120\"],\"roots\":{\"1120\":\"8aa5a5a3-57de-4695-bcff-8e64eb93f200\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);",
|
|
"application/vnd.bokehjs_exec.v0+json": ""
|
|
},
|
|
"metadata": {
|
|
"application/vnd.bokehjs_exec.v0+json": {
|
|
"id": "1120"
|
|
}
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"column_data = dict(\n",
|
|
" x=df['tsne_x'],\n",
|
|
" y=df['tsne_y'],\n",
|
|
" label=df['labels'],\n",
|
|
" label_desc=df['label_name'],\n",
|
|
" split=df['split'],\n",
|
|
" # video_id=df['video_id']\n",
|
|
")\n",
|
|
"\n",
|
|
"# get unique labels\n",
|
|
"set_labels = list(set(column_data['label']))\n",
|
|
"\n",
|
|
"# map labels to 0 to num_classes\n",
|
|
"label_to_id = {label: i for i, label in enumerate(set_labels)}\n",
|
|
"column_data['labels'] = [label_to_id[label] for label in column_data['label']]\n",
|
|
"\n",
|
|
"\n",
|
|
"if use_img_div:\n",
|
|
" emb_videos = load_videos(df['video_fn'])\n",
|
|
" column_data[\"videos\"] = emb_videos\n",
|
|
"source = ColumnDataSource(data=column_data)\n",
|
|
"\n",
|
|
"# scatter plot with for each label another color\n",
|
|
"p.scatter(x='x',\n",
|
|
" y='y',\n",
|
|
" source=source,\n",
|
|
" color={'field': 'labels', 'transform': cmap},\n",
|
|
" legend_field='label_desc',\n",
|
|
" size=10,\n",
|
|
" alpha=0.5)\n",
|
|
"\n",
|
|
"show(p)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "1c73f195",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"jupytext": {
|
|
"cell_metadata_filter": "-all",
|
|
"main_language": "python",
|
|
"notebook_metadata_filter": "-all"
|
|
},
|
|
"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.8.10"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|