diff --git a/assets/56_fine_tune_segformer/output.png b/assets/56_fine_tune_segformer/output.png deleted file mode 100644 index 29cee1e75f..0000000000 Binary files a/assets/56_fine_tune_segformer/output.png and /dev/null differ diff --git a/assets/56_fine_tune_segformer/pizza-scene.png b/assets/56_fine_tune_segformer/pizza-scene.png deleted file mode 100644 index 009c194293..0000000000 Binary files a/assets/56_fine_tune_segformer/pizza-scene.png and /dev/null differ diff --git a/assets/56_fine_tune_segformer/segformer.png b/assets/56_fine_tune_segformer/segformer.png deleted file mode 100644 index 3dd5b098ef..0000000000 Binary files a/assets/56_fine_tune_segformer/segformer.png and /dev/null differ diff --git a/assets/56_fine_tune_segformer/sidewalk-examples.png b/assets/56_fine_tune_segformer/sidewalk-examples.png deleted file mode 100644 index 650ab82ddd..0000000000 Binary files a/assets/56_fine_tune_segformer/sidewalk-examples.png and /dev/null differ diff --git a/assets/56_fine_tune_segformer/sidewalk-labeling-crop-poster.png b/assets/56_fine_tune_segformer/sidewalk-labeling-crop-poster.png deleted file mode 100644 index 900e809b3b..0000000000 Binary files a/assets/56_fine_tune_segformer/sidewalk-labeling-crop-poster.png and /dev/null differ diff --git a/assets/56_fine_tune_segformer/sidewalk-labeling-crop.mp4 b/assets/56_fine_tune_segformer/sidewalk-labeling-crop.mp4 deleted file mode 100644 index da291ae289..0000000000 Binary files a/assets/56_fine_tune_segformer/sidewalk-labeling-crop.mp4 and /dev/null differ diff --git a/assets/56_fine_tune_segformer/widget-poster.png b/assets/56_fine_tune_segformer/widget-poster.png deleted file mode 100644 index e29e8e796b..0000000000 Binary files a/assets/56_fine_tune_segformer/widget-poster.png and /dev/null differ diff --git a/assets/56_fine_tune_segformer/widget.mp4 b/assets/56_fine_tune_segformer/widget.mp4 deleted file mode 100644 index cd0a32c117..0000000000 Binary files a/assets/56_fine_tune_segformer/widget.mp4 and /dev/null differ diff --git a/fine-tune-segformer.md b/fine-tune-segformer.md index 16355728c4..6840301855 100644 --- a/fine-tune-segformer.md +++ b/fine-tune-segformer.md @@ -14,7 +14,7 @@ authors: - + Open In Colab @@ -27,7 +27,7 @@ Because semantic segmentation is a type of classification, the network architect [SegFormer](https://huggingface.co/docs/transformers/model_doc/segformer) is a model for semantic segmentation introduced by Xie et al. in 2021. It has a hierarchical Transformer encoder that doesn't use positional encodings (in contrast to ViT) and a simple multi-layer perceptron decoder. SegFormer achieves state-of-the-art performance on multiple common datasets. Let's see how our pizza delivery robot performs for sidewalk images.
- +
Let's get started by installing the necessary dependencies. Because we're going to push our dataset and model to the Hugging Face Hub, we need to install [Git LFS](https://git-lfs.github.com/) and log in to Hugging Face. @@ -59,7 +59,7 @@ To create your semantic segmentation dataset, you'll need two things: We went ahead and captured a thousand images of sidewalks in Belgium. Collecting and labeling such a dataset can take a long time, so you can start with a smaller dataset and expand it if the model does not perform well enough.
- +
Some examples of the raw images in the sidewalk dataset.
@@ -68,7 +68,7 @@ To obtain segmentation labels, we need to indicate the classes of all the region ### Set up the labeling task on Segments.ai First, create an account at [https://segments.ai/join](https://segments.ai/join?utm_source=hf&utm_medium=colab&utm_campaign=sem_seg). -Next, create a new dataset and upload your images. You can either do this from the web interface or via the Python SDK (see the [notebook](https://colab.research.google.com/drive/1BImTyBjW3KtvHGVcjGpYYFZdRGXzM3-j?usp=sharing)). +Next, create a new dataset and upload your images. You can either do this from the web interface or via the Python SDK (see the [notebook](https://colab.research.google.com/github/huggingface/blog/blob/main/notebooks/56_fine_tune_segformer.ipynb)). ### Label the images @@ -81,7 +81,7 @@ Now that the raw data is loaded, go to [segments.ai/home](https://segments.ai/ho style="max-width: 70%; margin: auto;" autoplay loop autobuffer muted playsinline > - +
Tip: when using the superpixel tool, scroll to change the superpixel size, and click and drag to select segments.
@@ -92,7 +92,7 @@ When you're done labeling, create a new dataset release containing the labeled d Note that creating the release can take a few seconds. You can check the releases tab on Segments.ai to check if your release is still being created. -Now, we'll convert the release to a [Hugging Face dataset](https://huggingface.co/docs/datasets/package_reference/main_classes.html#datasets.Dataset) via the Segments.ai Python SDK. If you haven't set up the Segments Python client yet, follow the instructions in the "Set up the labeling task on Segments.ai" section of the [notebook](https://colab.research.google.com/drive/1BImTyBjW3KtvHGVcjGpYYFZdRGXzM3-j#scrollTo=9T2Jr9t9y4HD). +Now, we'll convert the release to a [Hugging Face dataset](https://huggingface.co/docs/datasets/package_reference/main_classes.html#datasets.Dataset) via the Segments.ai Python SDK. If you haven't set up the Segments Python client yet, follow the instructions in the "Set up the labeling task on Segments.ai" section of the [notebook](https://colab.research.google.com/github/huggingface/blog/blob/main/notebooks/56_fine_tune_segformer.ipynb#scrollTo=9T2Jr9t9y4HD). *Note that the conversion can take a while, depending on the size of your dataset.* @@ -192,7 +192,7 @@ repo_id = f"datasets/{hf_dataset_identifier}" filename = "id2label.json" id2label = json.load(open(hf_hub_download(repo_id=hf_dataset_identifier, filename=filename, repo_type="dataset"), "r")) id2label = {int(k): v for k, v in id2label.items()} -label2id = {v: k for k, v in id2label.items() +label2id = {v: k for k, v in id2label.items()} num_labels = len(id2label) ``` @@ -237,7 +237,7 @@ test_ds.set_transform(val_transforms) The SegFormer authors define 5 models with increasing sizes: B0 to B5. The following chart (taken from the original paper) shows the performance of these different models on the ADE20K dataset, compared to other models.
- +
Source
@@ -324,7 +324,7 @@ def compute_metrics(eval_pred): references=labels, num_labels=len(id2label), ignore_index=0, - reduce_labels=feature_extractor.reduce_labels, + reduce_labels=feature_extractor.do_reduce_labels, ) # add per category metrics as individual key-value pairs @@ -387,7 +387,7 @@ However, you can also try out your model directly on the Hugging Face Hub, thank style="max-width: 70%; margin: auto;" autoplay loop autobuffer muted playsinline > - + @@ -438,7 +438,7 @@ pred_seg = upsampled_logits.argmax(dim=1)[0] Now it's time to display the result. We'll display the result next to the ground-truth mask.
- +
What do you think? Would you send our pizza delivery robot on the road with this segmentation information? diff --git a/notebooks/56_fine_tune_segformer.ipynb b/notebooks/56_fine_tune_segformer.ipynb new file mode 100644 index 0000000000..ef86662647 --- /dev/null +++ b/notebooks/56_fine_tune_segformer.ipynb @@ -0,0 +1,6016 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "tOQZT_SpMJWb" + }, + "source": [ + "**This guide shows how you can fine-tune Segformer, a state-of-the-art semantic segmentation model. Our goal is to build a model for a pizza delivery robot, so it can see where to drive and recognize obstacles 🍕🤖. We'll first label a set of sidewalk images on [Segments.ai](https://segments.ai?utm_source=hf&utm_medium=colab&utm_campaign=sem_seg). Then we'll fine-tune a pre-trained SegFormer model by using [`🤗 transformers`](https://huggingface.co/transformers), an open-source library that offers easy-to-use implementations of state-of-the-art models. Along the way, you'll learn how to work with the Hugging Face hub, the largest open-source catalog of models and datasets.**\n", + "\n", + "Semantic segmentation is the task of classifying each pixel in an image. You can see it as a more precise way of classifying an image. It has a wide range of use cases in fields such as medical imaging and autonomous driving. As an example, for our pizza delivery robot, it is important to know exactly where the sidewalk is in an image, not just whether there is a sidewalk or not.\n", + "\n", + "Because semantic segmentation is a type of classification, the network architectures that are used for image classification and semantic segmentation are very similar. In 2014, [a seminal paper](https://arxiv.org/abs/1411.4038) by Long et al. used convolutional neural networks for semantic segmentation. More recently, Transformers have been used for image classification (e.g. [ViT](https://huggingface.co/blog/fine-tune-vit)), and now they're also being used for semantic segmentation, pushing the state-of-the-art further.\n", + "\n", + "[SegFormer](https://arxiv.org/abs/2105.15203) is a model for semantic segmentation introduced by Xie et al in 2021. It has a hierarchical Transformer encoder that doesn't use positional encodings (in contrast to ViT) and a simple multi-layer perceptron decoder. SegFormer achieves state-of-the-art performance on multiple common datasets. Let's see how it performs for sidewalk images in our pizza delivery robot." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Pizza robot semantic segmentation](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/56_fine_tune_segformer/pizza-scene.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UfYigrqXm8wj" + }, + "source": [ + "Let's get started by installing the necessary dependencies and logging in to Hugging Face." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/" + }, + "id": "4RtsVDEeI8KL", + "outputId": "9cf98b07-b2dc-4689-ae19-1db4e1396b8f" + }, + "outputs": [], + "source": [ + "!pip install -q transformers datasets segments-ai evaluate" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 299 + }, + "id": "lECco8JEveg4", + "outputId": "fa55cd96-1d69-41b0-82ff-bb9f8cb5b642" + }, + "outputs": [], + "source": [ + "from huggingface_hub import notebook_login\n", + "\n", + "notebook_login()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1WSBI4zoS3TD" + }, + "outputs": [], + "source": [ + "hf_username = \"segments-tobias\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "34S5D1ntJReV" + }, + "source": [ + "# 1. Create/choose a dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4O2J9CWSwh7g" + }, + "source": [ + "The first step in any ML project is assembling a good dataset. In order to train a semantic segmentation model, we need a dataset with semantic segmentation labels. We can either use an existing dataset from the Hugging Face Hub, such as [ADE20k](https://huggingface.co/datasets/scene_parse_150), or create our own dataset.\n", + "\n", + "For our pizza delivery robot, we could use an existing autonomous driving dataset such as [CityScapes](https://www.cityscapes-dataset.com/) or [BDD100K](https://bdd100k.com/). However, these datasets were captured by cars driving on the road. Since our delivery robot will be driving on the sidewalk, there will be a mismatch between the images in these datasets and the data our robot will see in the real world. \n", + "\n", + "We don't want our delivery robot to get confused, so we'll create our own semantic segmentation dataset using images captured on sidewalks. In the next steps, we'll show how you can label the images we captured. If you just want to use our finished labeled dataset, you can skip the \"Create your own dataset\" section and continue from \"Use a dataset from the Hub\"." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GdLqU-p2Lvdj" + }, + "source": [ + "## Create your own dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0wzVSFuCwlvm" + }, + "source": [ + "\n", + "To create your own semantic segmentation dataset, you'll need two things: 1) images covering the situations your model will encounter in the real world, 2) segmentation labels, i.e. images where each pixel represents a class/category.\n", + "\n", + "We went ahead and captured a thousand images of sidewalks in Belgium. Collecting and labeling such a dataset can take a long time, so you can also start with a smaller dataset, and expand it if the model does not perform well enough." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "nlYOPx3OFsnC" + }, + "source": [ + "![Sidewalk examples](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/56_fine_tune_segformer/sidewalk-examples.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2I9DiKWlOVnp" + }, + "source": [ + "To obtain segmentation labels, we need to indicate the classes of all the regions/objects in these images. This can be a time-consuming endeavour, but using the right tools can speed up the task significantly. For labeling, we'll use [Segments.ai](https://segments.ai?utm_source=hf&utm_medium=colab&utm_campaign=sem_seg), since it has smart labeling tools for image segmentation, and an easy-to-use Python SDK." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9T2Jr9t9y4HD" + }, + "source": [ + "### Set up the labeling task on Segments.ai" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QJRdowdfyw0n" + }, + "source": [ + "First, create an account at [https://segments.ai/join](https://segments.ai/join?utm_source=hf&utm_medium=colab&utm_campaign=sem_seg). Next, you can create a dataset by using the web interface, or via the Python SDK. Here, we'll show how you can create a dataset programmatically." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hilsN0r1yc-3" + }, + "source": [ + "We'll start by initializing the Segments.ai client using an API key. This key can be found on [the account page](https://segments.ai/account)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Ub7WR4ySPKij" + }, + "outputs": [], + "source": [ + "from segments import SegmentsClient\n", + "from getpass import getpass\n", + "\n", + "api_key = getpass('Enter your API key: ')\n", + "segments_client = SegmentsClient(api_key)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fs0ITiinP8Lq" + }, + "source": [ + "Next, we'll create a new dataset by choosing a name and by listing the different categories we want to label." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "tNgrhLTnP7Yt" + }, + "outputs": [], + "source": [ + "dataset_name = \"sidewalk-imagery\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b6cxqPREqKzV" + }, + "source": [ + "The next cell contains the `task_attributes` with the categories we want to label. The format for `task_attributes` is defined in the [docs](https://docs.segments.ai/reference/categories-and-task-attributes)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "r2J-6b-OPXlu" + }, + "outputs": [], + "source": [ + "#@title `task_attributes = {...}`\n", + "\n", + "task_attributes = {\n", + " \"format_version\": \"0.1\",\n", + " \"categories\": [\n", + " {\n", + " \"name\": \"flat-road\",\n", + " \"id\": 1,\n", + " \"color\": [\n", + " 216,\n", + " 82,\n", + " 24,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"flat-sidewalk\",\n", + " \"id\": 2,\n", + " \"color\": [\n", + " 255,\n", + " 255,\n", + " 0\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"flat-crosswalk\",\n", + " \"id\": 3,\n", + " \"color\": [\n", + " 125,\n", + " 46,\n", + " 141,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"flat-cyclinglane\",\n", + " \"id\": 4,\n", + " \"color\": [\n", + " 118,\n", + " 171,\n", + " 47,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"flat-parkingdriveway\",\n", + " \"id\": 5,\n", + " \"color\": [\n", + " 161,\n", + " 19,\n", + " 46,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"flat-railtrack\",\n", + " \"id\": 6,\n", + " \"color\": [\n", + " 255,\n", + " 0,\n", + " 0,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"flat-curb\",\n", + " \"id\": 7,\n", + " \"color\": [\n", + " 0,\n", + " 128,\n", + " 128\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"human-person\",\n", + " \"id\": 8,\n", + " \"attributes\": [\n", + " {\n", + " \"name\": \"is_crowd\",\n", + " \"input_type\": \"checkbox\",\n", + " \"default_value\": False\n", + " }\n", + " ],\n", + " \"color\": [\n", + " 190,\n", + " 190,\n", + " 0,\n", + " 255\n", + " ]\n", + " },\n", + " {\n", + " \"name\": \"human-rider\",\n", + " \"id\": 9,\n", + " \"attributes\": [\n", + " {\n", + " \"name\": \"is_crowd\",\n", + " \"input_type\": \"checkbox\",\n", + " \"default_value\": False\n", + " }\n", + " ],\n", + " \"color\": [\n", + " 0,\n", + " 255,\n", + " 0,\n", + " 255\n", + " ]\n", + " },\n", + " {\n", + " \"name\": \"vehicle-car\",\n", + " \"id\": 10,\n", + " \"attributes\": [\n", + " {\n", + " \"name\": \"is_crowd\",\n", + " \"input_type\": \"checkbox\",\n", + " \"default_value\": False\n", + " }\n", + " ],\n", + " \"color\": [\n", + " 0,\n", + " 0,\n", + " 255,\n", + " 255\n", + " ]\n", + " },\n", + " {\n", + " \"name\": \"vehicle-truck\",\n", + " \"id\": 11,\n", + " \"attributes\": [\n", + " {\n", + " \"name\": \"is_crowd\",\n", + " \"input_type\": \"checkbox\",\n", + " \"default_value\": False\n", + " }\n", + " ],\n", + " \"color\": [\n", + " 170,\n", + " 0,\n", + " 255,\n", + " 255\n", + " ]\n", + " },\n", + " {\n", + " \"name\": \"vehicle-bus\",\n", + " \"id\": 12,\n", + " \"attributes\": [\n", + " {\n", + " \"name\": \"is_crowd\",\n", + " \"input_type\": \"checkbox\",\n", + " \"default_value\": False\n", + " }\n", + " ],\n", + " \"color\": [\n", + " 84,\n", + " 84,\n", + " 0,\n", + " 255\n", + " ]\n", + " },\n", + " {\n", + " \"name\": \"vehicle-tramtrain\",\n", + " \"id\": 13,\n", + " \"attributes\": [\n", + " {\n", + " \"name\": \"is_crowd\",\n", + " \"input_type\": \"checkbox\",\n", + " \"default_value\": False\n", + " }\n", + " ],\n", + " \"color\": [\n", + " 84,\n", + " 170,\n", + " 0,\n", + " 255\n", + " ]\n", + " },\n", + " {\n", + " \"name\": \"vehicle-motorcycle\",\n", + " \"id\": 14,\n", + " \"attributes\": [\n", + " {\n", + " \"name\": \"is_crowd\",\n", + " \"input_type\": \"checkbox\",\n", + " \"default_value\": False\n", + " }\n", + " ],\n", + " \"color\": [\n", + " 84,\n", + " 255,\n", + " 0,\n", + " 255\n", + " ]\n", + " },\n", + " {\n", + " \"name\": \"vehicle-bicycle\",\n", + " \"id\": 15,\n", + " \"attributes\": [\n", + " {\n", + " \"name\": \"is_crowd\",\n", + " \"input_type\": \"checkbox\",\n", + " \"default_value\": False\n", + " }\n", + " ],\n", + " \"color\": [\n", + " 170,\n", + " 84,\n", + " 0,\n", + " 255\n", + " ]\n", + " },\n", + " {\n", + " \"name\": \"vehicle-caravan\",\n", + " \"id\": 16,\n", + " \"attributes\": [\n", + " {\n", + " \"name\": \"is_crowd\",\n", + " \"input_type\": \"checkbox\",\n", + " \"default_value\": False\n", + " }\n", + " ],\n", + " \"color\": [\n", + " 170,\n", + " 170,\n", + " 0,\n", + " 255\n", + " ]\n", + " },\n", + " {\n", + " \"name\": \"vehicle-cartrailer\",\n", + " \"id\": 17,\n", + " \"attributes\": [\n", + " {\n", + " \"name\": \"is_crowd\",\n", + " \"input_type\": \"checkbox\",\n", + " \"default_value\": False\n", + " }\n", + " ],\n", + " \"color\": [\n", + " 170,\n", + " 255,\n", + " 0,\n", + " 255\n", + " ]\n", + " },\n", + " {\n", + " \"name\": \"construction-building\",\n", + " \"id\": 18,\n", + " \"color\": [\n", + " 255,\n", + " 84,\n", + " 0,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"construction-door\",\n", + " \"id\": 19,\n", + " \"color\": [\n", + " 255,\n", + " 170,\n", + " 0,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"construction-wall\",\n", + " \"id\": 20,\n", + " \"color\": [\n", + " 255,\n", + " 255,\n", + " 0,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"construction-fenceguardrail\",\n", + " \"id\": 21,\n", + " \"color\": [\n", + " 33,\n", + " 138,\n", + " 200\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"construction-bridge\",\n", + " \"id\": 22,\n", + " \"color\": [\n", + " 0,\n", + " 170,\n", + " 127,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"construction-tunnel\",\n", + " \"id\": 23,\n", + " \"color\": [\n", + " 0,\n", + " 255,\n", + " 127,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"construction-stairs\",\n", + " \"id\": 24,\n", + " \"color\": [\n", + " 84,\n", + " 0,\n", + " 127,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"object-pole\",\n", + " \"id\": 25,\n", + " \"attributes\": [\n", + " {\n", + " \"name\": \"is_crowd\",\n", + " \"input_type\": \"checkbox\",\n", + " \"default_value\": False\n", + " }\n", + " ],\n", + " \"color\": [\n", + " 84,\n", + " 84,\n", + " 127,\n", + " 255\n", + " ]\n", + " },\n", + " {\n", + " \"name\": \"object-trafficsign\",\n", + " \"id\": 26,\n", + " \"color\": [\n", + " 84,\n", + " 170,\n", + " 127,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"object-trafficlight\",\n", + " \"id\": 27,\n", + " \"color\": [\n", + " 84,\n", + " 255,\n", + " 127,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"nature-vegetation\",\n", + " \"id\": 28,\n", + " \"color\": [\n", + " 170,\n", + " 0,\n", + " 127,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"nature-terrain\",\n", + " \"id\": 29,\n", + " \"color\": [\n", + " 170,\n", + " 84,\n", + " 127,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"sky\",\n", + " \"id\": 30,\n", + " \"color\": [\n", + " 170,\n", + " 170,\n", + " 127,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"void-ground\",\n", + " \"id\": 31,\n", + " \"color\": [\n", + " 170,\n", + " 255,\n", + " 127,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"void-dynamic\",\n", + " \"id\": 32,\n", + " \"color\": [\n", + " 255,\n", + " 0,\n", + " 127,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"void-static\",\n", + " \"id\": 33,\n", + " \"color\": [\n", + " 255,\n", + " 84,\n", + " 127,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " },\n", + " {\n", + " \"name\": \"void-unclear\",\n", + " \"id\": 34,\n", + " \"color\": [\n", + " 255,\n", + " 170,\n", + " 127,\n", + " 255\n", + " ],\n", + " \"attributes\": []\n", + " }\n", + " ]\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GN3SGWhKPQv6" + }, + "outputs": [], + "source": [ + "dataset_response = segments_client.add_dataset(dataset_name, task_attributes=task_attributes, category='street_scenery')\n", + "dataset_identifier = f'{dataset_response.owner.username}/{dataset_name}'" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4J1loXEnQQYn" + }, + "source": [ + "Now we can add images to the dataset. As an example, we'll add 10 examples images from the sidewalk dataset using `segments_client.add_sample()`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "wg63cWzmQXaZ" + }, + "outputs": [], + "source": [ + "#@title `sample_attributes = [...]`\n", + "\n", + "sample_attributes = [\n", + " {\n", + " \"image\": {\n", + " \"url\": \"https://segmentsai-prod.s3.eu-west-2.amazonaws.com/assets/tobias/72939ba9-8488-4dfe-81a2-1a299f2e1d95.jpg\"\n", + " }\n", + " },\n", + " {\n", + " \"image\": {\n", + " \"url\": \"https://segmentsai-prod.s3.eu-west-2.amazonaws.com/assets/tobias/6ef02d5d-e7e4-40f6-b65a-47dee4815e7a.jpg\"\n", + " }\n", + " },\n", + " {\n", + " \"image\": {\n", + " \"url\": \"https://segmentsai-prod.s3.eu-west-2.amazonaws.com/assets/tobias/46216c90-7af9-4e06-af28-4a0734a1e3a2.jpg\"\n", + " }\n", + " },\n", + " {\n", + " \"image\": {\n", + " \"url\": \"https://segmentsai-prod.s3.eu-west-2.amazonaws.com/assets/tobias/545a233e-4413-4b35-9e89-659be3550ddf.jpg\"\n", + " }\n", + " },\n", + " {\n", + " \"image\": {\n", + " \"url\": \"https://segmentsai-prod.s3.eu-west-2.amazonaws.com/assets/tobias/3c0ef45e-6be6-48f3-b3cd-eb283ca3cb34.jpg\"\n", + " }\n", + " },\n", + " {\n", + " \"image\": {\n", + " \"url\": \"https://segmentsai-prod.s3.eu-west-2.amazonaws.com/assets/tobias/8683e29d-3112-4dff-9a64-c699bc6e1457.jpg\"\n", + " }\n", + " },\n", + " {\n", + " \"image\": {\n", + " \"url\": \"https://segmentsai-prod.s3.eu-west-2.amazonaws.com/assets/tobias/83ffe351-68ea-4730-b49c-4e6945ab5c18.jpg\"\n", + " }\n", + " },\n", + " {\n", + " \"image\": {\n", + " \"url\": \"https://segmentsai-prod.s3.eu-west-2.amazonaws.com/assets/tobias/653e6961-d2fa-4c1f-b450-9615707372ed.jpg\"\n", + " }\n", + " },\n", + " {\n", + " \"image\": {\n", + " \"url\": \"https://segmentsai-prod.s3.eu-west-2.amazonaws.com/assets/tobias/5ee54f18-f528-40dd-83a6-92ac4771fe75.jpg\"\n", + " }\n", + " },\n", + " {\n", + " \"image\": {\n", + " \"url\": \"https://segmentsai-prod.s3.eu-west-2.amazonaws.com/assets/tobias/54b0f15a-271e-4b0c-962f-23bbf179c554.jpg\"\n", + " }\n", + " },\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "BBicN9QISi_T" + }, + "outputs": [], + "source": [ + "for attributes in sample_attributes:\n", + " name = attributes['image']['url'].split('/')[-1]\n", + " segments_client.add_sample(dataset_identifier, name, attributes)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qMfjzufRss1f" + }, + "source": [ + "If you don't have URLs for the images you want to upload, you can use `segments_client.upload_asset()` first, see [this example](https://docs.segments.ai/reference/python-sdk#upload-a-file-as-an-asset). \n", + "\n", + "Alternatively, you can also drag and drop your files to the Samples tab of your dataset." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "k0dfgKViy754" + }, + "source": [ + "### Label the images" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JHNUFJrMRbX4" + }, + "source": [ + "Now that the raw data is loaded, go to [segments.ai/home](https://segments.ai/home) and open the newly created dataset. Click \"Start labeling\" and create segmentation masks. You can use the ML-powered superpixel and autosegment tools to label faster." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Labeling](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/56_fine_tune_segformer/sidewalk-labeling-crop.gif)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EqVMiSORdWmr" + }, + "source": [ + "*Tip: when using the superpixel tool, scroll to change the superpixel size, and click and drag to select segments.*" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "k2jgvm8dy_63" + }, + "source": [ + "### Push the result to the Hugging Face Hub" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qNgvwFxwRvLm" + }, + "source": [ + "When you're done labeling, create a new dataset release containing the labeled data. You can either do this on the releases tab on Segments.ai, or programmatically through the SDK as shown below. \n", + "\n", + "Note that creating the release can take a few seconds. You can check the releases tab on Segments.ai to check if your release is still being created." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "-NKKwvIgRk-_" + }, + "outputs": [], + "source": [ + "release_name = \"v0.1\"\n", + "\n", + "segments_client.add_release(dataset_identifier, release_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ltDp-tuqLCiB" + }, + "source": [ + "Now, we'll use the `release2dataset` function to convert our release to a [Hugging Face dataset](https://huggingface.co/docs/datasets/package_reference/main_classes.html#datasets.Dataset). This can take a while, depending on the size of your dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GKIiiPR1K9UJ" + }, + "outputs": [], + "source": [ + "from segments.huggingface import release2dataset\n", + "\n", + "release = segments_client.get_release(dataset_identifier, release_name)\n", + "hf_dataset = release2dataset(release)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mS8FuWLLopHA" + }, + "outputs": [], + "source": [ + "hf_dataset.features" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ivsP2n49Ntoq" + }, + "source": [ + "If we inspect the features of the new dataset, we can see the image column and the corresponding label. The label consists of two parts: a list of annotations and a segmentation bitmap. The annotation corresponds to the different objects in the image. For each object, the annotation contains an `id` and a `category_id`. The segmentation bitmap is an image where each pixel contains the `id` of the object at that pixel. More information can be found in the [relevant docs](https://docs.segments.ai/reference/sample-and-label-types/label-types#segmentation-labels).\n", + "\n", + "For semantic segmentation, we need a semantic bitmap with a `category_id` for each pixel. We'll use the `get_semantic_bitmap` function from the Segments.ai SDK to convert the bitmaps to semantic bitmaps. In order to apply this function to all the rows in our dataset, we'll use [`dataset.map`](https://huggingface.co/docs/datasets/package_reference/main_classes#datasets.Dataset.map)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "L8BPlz9eYUWP" + }, + "outputs": [], + "source": [ + "from segments.utils import get_semantic_bitmap\n", + "\n", + "\n", + "def convert_segmentation_bitmap(example):\n", + " return {\n", + " \"label.segmentation_bitmap\":\n", + " get_semantic_bitmap(\n", + " example[\"label.segmentation_bitmap\"],\n", + " example[\"label.annotations\"],\n", + " )\n", + " }\n", + "\n", + "\n", + "semantic_dataset = hf_dataset.map(\n", + " convert_segmentation_bitmap,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yxTx7KarZGjq" + }, + "source": [ + "\n", + "You can also rewrite the `convert_segmentation_bitmap` function to use batches and pass `batched=True` to `dataset.map`. This will speed up the mapping significantly, but you might need to tweak the `batch_size` to make sure the process doesn't run out of memory." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pzcpvZMVFC2g" + }, + "source": [ + "The SegFormer model we're going to fine-tune later expects certain names for the features. For convenience, we'll already match this format now. Thus, we'll rename the `image` feature to `pixel_values`, the `label.segmentation_bitmap` to `label` and discard the other features." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ee0wFzIb_GF6" + }, + "outputs": [], + "source": [ + "semantic_dataset = semantic_dataset.rename_column('image', 'pixel_values')\n", + "semantic_dataset = semantic_dataset.rename_column('label.segmentation_bitmap', 'label')\n", + "semantic_dataset = semantic_dataset.remove_columns(['name', 'uuid', 'status', 'label.annotations'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "-coXlPirrt4R" + }, + "outputs": [], + "source": [ + "semantic_dataset.features" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ifsnD9a3R04Z" + }, + "source": [ + "We can now push the transformed dataset to the Hugging Face Hub. That way, your team and the Hugging Face community can make use of it. In the next section, we'll see how you can load the dataset from the hub." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zq-ASpXQRyNr" + }, + "outputs": [], + "source": [ + "hf_dataset_identifier = f\"{hf_username}/{dataset_name}\"\n", + "\n", + "semantic_dataset.push_to_hub(hf_dataset_identifier)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "itStQ9reLLRb" + }, + "source": [ + "## Use a dataset from the Hub" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0M0ibxWgwqyd" + }, + "source": [ + "If you don't want to create your own dataset, but found a suitable dataset for your use case on the Hugging Face Hub, you can define the identifier here.\n", + "\n", + "For example, you can use the full labeled sidewalk dataset. Note that you can check out the examples [directly in your browser](https://huggingface.co/datasets/segments/sidewalk-semantic)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7aMw7Sc_KVvS" + }, + "outputs": [], + "source": [ + "hf_dataset_identifier = \"segments/sidewalk-semantic\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6ak5tUQSSMMv" + }, + "source": [ + "# 2. Load and prepare the Hugging Face dataset for training" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kpwIB1_zEQ4m" + }, + "source": [ + "Now that we've created a new dataset and pushed it to the Hugging Face Hub, we can load the dataset in a single line." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 283, + "referenced_widgets": [ + "a333fe7202cc4148b09813a9eb7c7835", + "2d8b1e187c754c24abd4357033c1053e", + "be90780c4aa44cf7b16bcf245a960f59", + "ab1871dc88fe439f852b1652808e35b3", + "fe409f2089ca42249b35fa5d892ed6d9", + "d6749f3d135e4ef2b7cda23d5c0b86d7", + "5fa9a52011fa4beb92f823d3d1c46a35", + "1ade57bbb0c74e929439612a27d6b461", + "e66ca393162a494a9c56c35c8bbddb59", + "b806c467df834477a7794f74bc30b049", + "43991a4fbdce48fc8a816faee5d76b20", + "8905921ad7e843d5864fb0bbc0fc9f97", + "217f7b6b976246278adf81a59debfa5a", + "78ed12b4b55f4af0ac0a0a674f525374", + "3a750da3b8034bcaa7c003e32aa5a6bd", + "42e24cc126e14bf5a1fd4bf43ad6ca0c", + "8ace8fb00ccc4a09bac71d6ff6deb051", + "080717aafa8f4512ad924afc5576c4c1", + "cc08910b015e41e58a16f8417a65b045", + "7cb8df8659c845db9bf813b6bc854880", + "28ee9291f1e1418999c9ab4a6924291b", + "5fc4cb70f837479dbe27a372baa86059", + "41da83b4059946aeb2c37067c3b136aa", + "72f5479f320a4869aae13f4ec852d425", + "ff68b3eda7f3401fbc5f2cf52d702c14", + "672f8b67867b40c68c352d0c65238975", + "0b2e67dfb1844bbd97b956bf37233000", + "93839cc922d94696a08f207274b64972", + "1fcda8ebbe7d421884815f2321fe2b11", + "8e5bf0a6382b40828386563657b1bedd", + "26ace754da054f3db4a81f5697819fea", + "e43eaee5d3ff4d03bc1bad37031b21bb", + "e01a28deac8e4d2683e8bfddfdf3fdce", + "9fe6950e856949bb8ab87a4297258ec3", + "d6b1b99b299a478080aad72a7f4b0ae8", + "8f9fced5333e4c698766836267b084bd", + "3ff882aec124413d8dcff4d50346f05e", + "ff1d05b7a4814825bbcfa67676fdf265", + "93b5f44097d54bb2b0e0844994723dd3", + "3fc2b3dd6d2d4b69996908a25b9b3d54", + "adf003e9917d4a959d0cad14735f6f11", + "a7d83738f6be4d4da4394636ee41a712", + "3c2bbc396857412abec28f3eaf4c5b5c", + "4404c1a831b144e7a466eadf1bbe18bc", + "71a3fa014a4744f5a551b6c52ffbd511", + "24c24151cb864078ac1c99e6f97d1bd9", + "4277bd6b06e8407ca5e2ac835beac227", + "8d10bd2fae664a93b3f48397ef64ee09", + "25b4f1cfa3cc425a8a3b1600a987c3ce", + "d4009b89253042708fdbec5960af10e0", + "f9bc284e1d17477b97139eaa597696f5", + "7d15aaf81a844a9384d11eae6e52a052", + "6e1ed941b44f467f8cc847e320ef291a", + "64fa7b9cd5f34a6895ee16595e81f6df", + "7c16c33137c74a4c8eb6e45454cfee77", + "a498c595ea514b9087013c4483af0ebd", + "f7349098575d4d859500cf4e3b015e6a", + "f349a6b0d60c47e7a7641aecc19ac179", + "5d95c48258ce4d8bb37ab64cdda30d26", + "a0c71dab400a4781b4eb563a90d89807", + "94bd515e333348af9d1f0174b3659177", + "d1b98c4b67b4496084c55c818ab80935", + "dfa28a6e7fa84c88b3e89463160348bf", + "e500fc12f99149c7a4ec2e67481550e0", + "677209c8307245838ccfddb67f11d832", + "2327fc96ad0e40aa8a98c4d29fdaea6c", + "d35e26d49c4c454dbde5c061fb708c3f", + "1345fff5d7eb436dbef9a9f8018a7b93", + "4b899362f3c742afb097116dfda00607", + "668f188c31a844a6a9aa45869718cd7b", + "fa68cab4efdb4132982c2c6461f3ffe0", + "bef11d6b389d4513a34d68e18b5c7816", + "3cd4ce7d5e9f43fe85bbc4df5b28019c", + "a91d2d3b0c264e338913841719956b5c", + "18290fc44a984892a24e2786ce4a0d4a", + "a2af25d5b022473bb462c910cee74a53", + "86983b8263974f8d8b5c51bd205085b7" + ] + }, + "id": "sHInIwdCSOTg", + "outputId": "4710dd4b-a93c-4c54-e322-ff9ad0c5b77a" + }, + "outputs": [], + "source": [ + "from datasets import load_dataset\n", + "\n", + "ds = load_dataset(hf_dataset_identifier)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6LiseiI15Ea7" + }, + "source": [ + "Let's shuffle the dataset and split the dataset in a train and test set." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fHedg8mf5NDK" + }, + "outputs": [], + "source": [ + "ds = ds.shuffle(seed=1)\n", + "ds = ds[\"train\"].train_test_split(test_size=0.2)\n", + "train_ds = ds[\"train\"]\n", + "test_ds = ds[\"test\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eSxDcDH6E6fE" + }, + "source": [ + "We'll extract the number of labels and the human-readable ids, so we can configure the segmentation model correctly later on." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 87, + "referenced_widgets": [ + "e8a7d503141d4917918bbc9daf949ccd", + "4b17217df6a84c29945fbbe337abbf62", + "f656216b07eb40a2a6b3fd176d284455", + "ea96bd5c08f5485a8d5197f17b43cfb2", + "29615c3f76514ab295a55628e15e1160", + "c09bac6416c041e595c307f843b5c67a", + "7be11677747a4a268183d7f2a2cdc212", + "cfc7a4a16ab34cc8ab359b18102964d5", + "53fa9b65775241d78bbd3b6913f8063b", + "03337e4160434fa1a06d8b47a3c8f9ee", + "916862871cf74e4ca3dda0a20f6c5871" + ] + }, + "id": "hSlztvBBURBC", + "outputId": "23bb00f6-f9e9-4537-e366-d89ba11abbe3" + }, + "outputs": [], + "source": [ + "import json\n", + "from huggingface_hub import hf_hub_download\n", + "\n", + "filename = \"id2label.json\"\n", + "id2label = json.load(open(hf_hub_download(repo_id=hf_dataset_identifier, filename=filename, repo_type=\"dataset\"), \"r\"))\n", + "id2label = {int(k): v for k, v in id2label.items()}\n", + "label2id = {v: k for k, v in id2label.items()}\n", + "\n", + "num_labels = len(id2label)\n", + "print(\"Id2label:\", id2label)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EobXJvy2EAQy" + }, + "source": [ + "## Feature extractor & data augmentation" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Za3n6MH1UuDb" + }, + "source": [ + "A SegFormer model expects the input to be of a certain shape. To transform our training data to match the expected shape, we can use `SegFormerFeatureExtractor`. We could use the `ds.map` function to apply the feature extractor to the whole training dataset in advance, but this can take up a lot of disk space. Instead, we'll use a *transform*, which will only prepare a batch of data when that data is actually used (on-the-fly). This way, we can start training without waiting for further data preprocessing.\n", + "\n", + "In our transform, we'll also define some data augmentations to make our model more resilient to different lighting conditions. We'll use the [`ColorJitter`](https://pytorch.org/vision/main/generated/torchvision.transforms.ColorJitter.html) function from `torchvision` to randomly change the brightness, contrast, saturation, and hue of the images in the batch." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 105, + "referenced_widgets": [ + "982338bb1fd64ae593c5ba45ea7df33f", + "0ee80704b0b1450f9c5481c8a530f76f", + "8753fa3c37f345a2adf1af776d389aba", + "c413bd4815d44b17a6b151851dc49666", + "717790780b904ed0a4f8ee30ad4af4ef", + "752b6dc067284438878a92572fe74bfd", + "c4ceeb1dab4d4d43bff0f1321f4565c2", + "de4844e91374458d8e8b4a593984b48f", + "d5cabb26063545bba172d8b9db670ce0", + "ffe38865177443cb9d4b65b4ca55a8b6", + "eb62c77d660d47c6906220748b7820c0" + ] + }, + "id": "xhjJC91WUtWF", + "outputId": "40811010-9e99-4c8d-9159-f08f85675147" + }, + "outputs": [], + "source": [ + "from torchvision.transforms import ColorJitter\n", + "from transformers import (\n", + " SegformerFeatureExtractor,\n", + ")\n", + "\n", + "feature_extractor = SegformerFeatureExtractor()\n", + "jitter = ColorJitter(brightness=0.25, contrast=0.25, saturation=0.25, hue=0.1) \n", + "\n", + "def train_transforms(example_batch):\n", + " images = [jitter(x) for x in example_batch['pixel_values']]\n", + " labels = [x for x in example_batch['label']]\n", + " inputs = feature_extractor(images, labels)\n", + " return inputs\n", + "\n", + "\n", + "def val_transforms(example_batch):\n", + " images = [x for x in example_batch['pixel_values']]\n", + " labels = [x for x in example_batch['label']]\n", + " inputs = feature_extractor(images, labels)\n", + " return inputs\n", + "\n", + "\n", + "# Set transforms\n", + "train_ds.set_transform(train_transforms)\n", + "test_ds.set_transform(val_transforms)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Plz_xtW1VXRP" + }, + "source": [ + "# 3. Fine-tune a SegFormer model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3ci_NXUQV02W" + }, + "source": [ + "## Load the model to fine-tune" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kewn1jbTINC0" + }, + "source": [ + "The SegFormer authors define 5 models with increasing sizes: B0 to B5. The following chart (taken from the original paper) shows the performance of these different models on the ADE20K dataset, compared to other models." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "YP19G_pHJfWS" + }, + "source": [ + "![Segmentation model comparison](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/56_fine_tune_segformer/segformer.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "LeDcwGP_KDJ5" + }, + "source": [ + "Here, we'll load the smallest SegFormer model (B0), pre-trained on ImageNet-1k. It's only about 14MB in size!\n", + "\n", + "Using a small model will make sure that our model can run smoothly on our pizza delivery robot." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 190, + "referenced_widgets": [ + "7132be16062d4328beb324872727b0ce", + "34bde1cac94041fcad69d631194885c6", + "ca4ffd6aabf040c98a8cc91ca1593e45", + "10102a9988b848c9a0f81172bbbd0a35", + "c3871f07f1094c3c827c37b1d90e3b8f", + "ab9ecfc3e19c44159752543430c5d133", + "5a6bcac80a134ce2abfdcc92ea925d38", + "f3a5136178754c7d9d116335464c294b", + "590646dbf32249c98af9b9b31b0725ef", + "3745898673414b54a7dfcdb964516751", + "2a6b1f70708b4caa8121c1ef0cc9b194", + "338c06e339744025b8333bd4301c0a8b", + "b7e63291402e4739971f7b8db65faaf8", + "af48af6f97cf4c6aa3f0c1f0f6d59fe4", + "1437c192d7e54418ae9345608d4231b0", + "18475c77baac42c08d4f9d3839198f88", + "fc9f20c3b880418cb7918532e242cda9", + "157cef99a08c4aaa8b74ea09b9a73d53", + "6af1e65a3d594244a33cda5ac9830389", + "5afb5adc1f1e4ac4902d4e21c51a7818", + "c0e3485b83934987a5efa44efe58a05d", + "5d7196ad4b1548ba87b963b267583019" + ] + }, + "id": "QGEY0JALVYLV", + "outputId": "f85a1b1d-a9bd-422a-eb0a-ec11ce99ddf5" + }, + "outputs": [], + "source": [ + "from transformers import SegformerForSemanticSegmentation\n", + "\n", + "pretrained_model_name = \"nvidia/mit-b0\" \n", + "model = SegformerForSemanticSegmentation.from_pretrained(\n", + " pretrained_model_name,\n", + " id2label=id2label,\n", + " label2id=label2id\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d7nqNiuZV7du" + }, + "source": [ + "## Set up the Trainer" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1keMOe9kKh-y" + }, + "source": [ + "To fine-tune the model on our data, we'll use Hugging Face's [Trainer API](https://huggingface.co/docs/transformers/main_classes/trainer). In order to use a Trainer, we need to set up the training configuration, and an evalutation metric." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DxxFRO77WWAp" + }, + "source": [ + "First, we'll set up the [`TrainingArguments`](https://huggingface.co/docs/transformers/main_classes/trainer#transformers.TrainingArguments). This defines all training hyperparameters, such as learning rate and the number of epochs, frequency to save the model and so on. We also specify to push the model to the hub after training (`push_to_hub=True`) and specify a model name (`hub_model_id`)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fZJ2HJcyV8uQ" + }, + "outputs": [], + "source": [ + "from transformers import TrainingArguments\n", + "\n", + "epochs = 50\n", + "lr = 0.00006\n", + "batch_size = 2\n", + "\n", + "hub_model_id = \"segformer-b0-finetuned-segments-sidewalk-oct-22\"\n", + "\n", + "training_args = TrainingArguments(\n", + " \"segformer-b0-finetuned-segments-sidewalk-outputs\",\n", + " learning_rate=lr,\n", + " num_train_epochs=epochs,\n", + " per_device_train_batch_size=batch_size,\n", + " per_device_eval_batch_size=batch_size,\n", + " save_total_limit=3,\n", + " evaluation_strategy=\"steps\",\n", + " save_strategy=\"steps\",\n", + " save_steps=20,\n", + " eval_steps=20,\n", + " logging_steps=1,\n", + " eval_accumulation_steps=5,\n", + " load_best_model_at_end=True,\n", + " push_to_hub=True,\n", + " hub_model_id=hub_model_id,\n", + " hub_strategy=\"end\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pPMzKQO8MmX6" + }, + "source": [ + "Next, we'll define a function that computes the evaluation metric we want to work with. Because we're doing semantic segmentation, we'll use the mean Intersection over Union (mIoU), directly accessible in the `datasets` library (see [here](https://huggingface.co/metrics/mean_iou)). IoU represents the overlap of segmentation masks. Mean IoU is the average of the IoU of all semantic classes. Take a look at [this blogpost](https://www.jeremyjordan.me/evaluating-image-segmentation-models/) for an overview of evaluation metrics for image segmentation.\n", + "\n", + "Because our model outputs logits with dimensions height/4 and width/4, we have to upscale them before we can compute the mIoU." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 49, + "referenced_widgets": [ + "1f657a11f0e347ad8ba86800bbacde9f", + "92ba38d13cfb4891a880fe268778df6e", + "66bc569712af420e8e553e8e3463c0a8", + "a15906ccdc694bc68a19e20f48313469", + "4a9732e670204eafac847d7fad3f24b9", + "322a8d8fe9684c848cca7b97c68bbdcb", + "5dec25ed0f744fcc8a6b948c377b9bfc", + "c7025b8650fc4051a46beacb54ee76c7", + "504c5873466a4ddc9a509f41bc44a763", + "182c8515eec746f493318ce9f7438c19", + "8298a9c05f1341d691378291a344f5cc" + ] + }, + "id": "DKOHOKaOL9Ze", + "outputId": "a8b56e6e-96b0-4bd5-ef1f-ecb38c88d6be" + }, + "outputs": [], + "source": [ + "import torch\n", + "from torch import nn\n", + "import evaluate\n", + "import multiprocessing\n", + "\n", + "metric = evaluate.load(\"mean_iou\")\n", + "\n", + "def compute_metrics(eval_pred):\n", + " with torch.no_grad():\n", + " logits, labels = eval_pred\n", + " logits_tensor = torch.from_numpy(logits)\n", + " # scale the logits to the size of the label\n", + " logits_tensor = nn.functional.interpolate(\n", + " logits_tensor,\n", + " size=labels.shape[-2:],\n", + " mode=\"bilinear\",\n", + " align_corners=False,\n", + " ).argmax(dim=1)\n", + "\n", + " pred_labels = logits_tensor.detach().cpu().numpy()\n", + " metrics = metric._compute(\n", + " predictions=pred_labels,\n", + " references=labels,\n", + " num_labels=len(id2label),\n", + " ignore_index=0,\n", + " reduce_labels=feature_extractor.do_reduce_labels,\n", + " )\n", + " \n", + " # add per category metrics as individual key-value pairs\n", + " per_category_accuracy = metrics.pop(\"per_category_accuracy\").tolist()\n", + " per_category_iou = metrics.pop(\"per_category_iou\").tolist()\n", + "\n", + " metrics.update({f\"accuracy_{id2label[i]}\": v for i, v in enumerate(per_category_accuracy)})\n", + " metrics.update({f\"iou_{id2label[i]}\": v for i, v in enumerate(per_category_iou)})\n", + "\n", + " return metrics" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3QjK0poxOBmj" + }, + "source": [ + "Finally, we can instantiate a `Trainer` object." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "NmyNBmg2Wacv", + "outputId": "b98a8806-9eeb-4c56-a534-a5c56efe4468" + }, + "outputs": [], + "source": [ + "from transformers import Trainer\n", + "\n", + "trainer = Trainer(\n", + " model=model,\n", + " args=training_args,\n", + " train_dataset=train_ds,\n", + " eval_dataset=test_ds,\n", + " compute_metrics=compute_metrics,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fcP5RRZfWsex" + }, + "source": [ + "Now that our trainer is set up, training is as simple as calling the `train` function. We don't need to worry about managing our GPU(s), the trainer will take care of that." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "7Up9QNqOWtSD", + "outputId": "32826f5e-88df-4b1a-e2e9-2613cc86fb15" + }, + "outputs": [], + "source": [ + "trainer.train()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YlOal7giORmw" + }, + "source": [ + "When we're done with training, we can push our fine-tuned model and the feature extractor to the Hugging Face hub.\n", + "\n", + "This will also automatically create a model card with our results. We'll supply some extra information in `kwargs` to make the model card more complete." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fdg5bKK0pjYm" + }, + "outputs": [], + "source": [ + "kwargs = {\n", + " \"tags\": [\"vision\", \"image-segmentation\"],\n", + " \"finetuned_from\": pretrained_model_name,\n", + " \"dataset\": hf_dataset_identifier,\n", + "}\n", + "\n", + "feature_extractor.push_to_hub(hub_model_id)\n", + "trainer.push_to_hub(**kwargs)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yjd6WuBJW0qX" + }, + "source": [ + "# 4. Inference" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9YBOUiDuOpXp" + }, + "source": [ + "Now comes the exciting part, using our fine-tuned model! In this section, we'll show how you can load your model from the hub and use it for inference. \n", + "\n", + "However, you can also try out your model directly on the Hugging Face Hub, thanks to the cool widgets powered by the [hosted inference API](https://api-inference.huggingface.co/docs/python/html/index.html). If you pushed your model to the hub in the previous step, you should see an inference widget on your model page. You can add default examples to the widget by defining example image URLs in your model card. See [this model card](https://huggingface.co/segments-tobias/segformer-b0-finetuned-segments-sidewalk/blob/main/README.md) as an example." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "U69agBxj3TjE" + }, + "source": [ + "![Inference widget](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/56_fine_tune_segformer/widget-poster.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lKigaXztQijt" + }, + "source": [ + "## Use the model from the hub" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JFEwCwp0Qo7q" + }, + "source": [ + "We'll first load the model from the hub using `SegformerForSemanticSegmentation.from_pretrained()`.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "yHi_8qKIW1Sa" + }, + "outputs": [], + "source": [ + "from transformers import SegformerFeatureExtractor, SegformerForSemanticSegmentation\n", + "\n", + "feature_extractor = SegformerFeatureExtractor.from_pretrained(\"nvidia/segformer-b0-finetuned-ade-512-512\")\n", + "model = SegformerForSemanticSegmentation.from_pretrained(f\"{hf_username}/{hub_model_id}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SQJkEqGxQwz6" + }, + "source": [ + "Next, we'll load an image from our test dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "R57X_iNkqv6H" + }, + "outputs": [], + "source": [ + "image = test_ds[0]['pixel_values']\n", + "gt_seg = test_ds[0]['label']\n", + "image" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7m7IfMv6R3_5" + }, + "source": [ + "To segment this test image, we first need to prepare the image using the feature extractor. Then we forward it through the model.\n", + "\n", + "We also need to remember to upscale the output logits to the original image size. In order to get the actual category predictions, we just have to apply an `argmax` on the logits." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8nNSSqEUBS2v" + }, + "outputs": [], + "source": [ + "from torch import nn\n", + "\n", + "inputs = feature_extractor(images=image, return_tensors=\"pt\")\n", + "outputs = model(**inputs)\n", + "logits = outputs.logits # shape (batch_size, num_labels, height/4, width/4)\n", + "\n", + "# First, rescale logits to original image size\n", + "upsampled_logits = nn.functional.interpolate(\n", + " logits,\n", + " size=image.size[::-1], # (height, width)\n", + " mode='bilinear',\n", + " align_corners=False\n", + ")\n", + "\n", + "# Second, apply argmax on the class dimension\n", + "pred_seg = upsampled_logits.argmax(dim=1)[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oyHddde_SOgv" + }, + "source": [ + "Now it's time to display the result. The next cell defines the colors for each category, so that they match the \"category coloring\" on Segments.ai." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "Ky_8gHCRCJHj" + }, + "outputs": [], + "source": [ + "#@title `def sidewalk_palette()`\n", + "\n", + "def sidewalk_palette():\n", + " \"\"\"Sidewalk palette that maps each class to RGB values.\"\"\"\n", + " return [\n", + " [0, 0, 0],\n", + " [216, 82, 24],\n", + " [255, 255, 0],\n", + " [125, 46, 141],\n", + " [118, 171, 47],\n", + " [161, 19, 46],\n", + " [255, 0, 0],\n", + " [0, 128, 128],\n", + " [190, 190, 0],\n", + " [0, 255, 0],\n", + " [0, 0, 255],\n", + " [170, 0, 255],\n", + " [84, 84, 0],\n", + " [84, 170, 0],\n", + " [84, 255, 0],\n", + " [170, 84, 0],\n", + " [170, 170, 0],\n", + " [170, 255, 0],\n", + " [255, 84, 0],\n", + " [255, 170, 0],\n", + " [255, 255, 0],\n", + " [33, 138, 200],\n", + " [0, 170, 127],\n", + " [0, 255, 127],\n", + " [84, 0, 127],\n", + " [84, 84, 127],\n", + " [84, 170, 127],\n", + " [84, 255, 127],\n", + " [170, 0, 127],\n", + " [170, 84, 127],\n", + " [170, 170, 127],\n", + " [170, 255, 127],\n", + " [255, 0, 127],\n", + " [255, 84, 127],\n", + " [255, 170, 127],\n", + " ]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f4BzL0ISSePY" + }, + "source": [ + "The next function overlays the output segmentation map on the original image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "G3HqZXyQB7gJ" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "def get_seg_overlay(image, seg):\n", + " color_seg = np.zeros((seg.shape[0], seg.shape[1], 3), dtype=np.uint8) # height, width, 3\n", + " palette = np.array(sidewalk_palette())\n", + " for label, color in enumerate(palette):\n", + " color_seg[seg == label, :] = color\n", + "\n", + " # Show image + mask\n", + " img = np.array(image) * 0.5 + color_seg * 0.5\n", + " img = img.astype(np.uint8)\n", + "\n", + " return img" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-yEXFytLSkht" + }, + "source": [ + "We'll display the result next to the ground-truth mask." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vnSn2A2U0RMw" + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "pred_img = get_seg_overlay(image, pred_seg)\n", + "gt_img = get_seg_overlay(image, np.array(gt_seg))\n", + "\n", + "f, axs = plt.subplots(1, 2)\n", + "f.set_figheight(30)\n", + "f.set_figwidth(50)\n", + "\n", + "axs[0].set_title(\"Prediction\", {'fontsize': 40})\n", + "axs[0].imshow(pred_img)\n", + "axs[1].set_title(\"Ground truth\", {'fontsize': 40})\n", + "axs[1].imshow(gt_img)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "r3Chx4bXaCYa" + }, + "source": [ + "What do you think? Would you send our pizza delivery robot on the road with this segmentation information?\n", + "\n", + "The result might not be perfect yet, but we can always expand our dataset to make the model more robust. We can now also go train a larger SegFormer model, and see how it stacks up." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-_p2KvvfT-tK" + }, + "source": [ + "# 5. Conclusion" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZFUlFbJyTZ81" + }, + "source": [ + "That's it! You now know how to create your own image segmentation dataset and how to use it to fine-tune a semantic segmentation model.\n", + "\n", + "We introduced you to some useful tools along the way, such as:\n", + "\n", + "\n", + "* [Segments.ai](https://segments.ai) for labeling your data\n", + "* [🤗 datasets](https://huggingface.co/docs/datasets/) for creating and sharing a dataset\n", + "* [🤗 transformers](https://huggingface.co/transformers) for easily fine-tuning a state-of-the-art segmentation model\n", + "* [🤗 hub](https://huggingface.co/docs/hub/main) for sharing our dataset and model, and for creating an inference widget for our model\n", + "\n", + "\n", + "We hope you enjoyed this post and learned something. Feel free to share your own model with us on Twitter ([@TobiasCornille](https://twitter.com/tobiascornille), [@NielsRogge](https://twitter.com/nielsrogge), and [@huggingface](https://twitter.com/huggingface))." + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [ + "GdLqU-p2Lvdj" + ], + "machine_shape": "hm", + "provenance": [] + }, + "gpuClass": "standard", + "kernelspec": { + "display_name": "Python 3", + "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" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "03337e4160434fa1a06d8b47a3c8f9ee": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "080717aafa8f4512ad924afc5576c4c1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "0b2e67dfb1844bbd97b956bf37233000": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "0ee80704b0b1450f9c5481c8a530f76f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_752b6dc067284438878a92572fe74bfd", + "placeholder": "​", + "style": "IPY_MODEL_c4ceeb1dab4d4d43bff0f1321f4565c2", + "value": "" + } + }, + "10102a9988b848c9a0f81172bbbd0a35": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3745898673414b54a7dfcdb964516751", + "placeholder": "​", + "style": "IPY_MODEL_2a6b1f70708b4caa8121c1ef0cc9b194", + "value": " 70.0k/70.0k [00:00<00:00, 118kB/s]" + } + }, + "1345fff5d7eb436dbef9a9f8018a7b93": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_bef11d6b389d4513a34d68e18b5c7816", + "placeholder": "​", + "style": "IPY_MODEL_3cd4ce7d5e9f43fe85bbc4df5b28019c", + "value": "100%" + } + }, + "1437c192d7e54418ae9345608d4231b0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c0e3485b83934987a5efa44efe58a05d", + "placeholder": "​", + "style": "IPY_MODEL_5d7196ad4b1548ba87b963b267583019", + "value": " 14.4M/14.4M [00:10<00:00, 4.03MB/s]" + } + }, + "157cef99a08c4aaa8b74ea09b9a73d53": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "18290fc44a984892a24e2786ce4a0d4a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "182c8515eec746f493318ce9f7438c19": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "18475c77baac42c08d4f9d3839198f88": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1ade57bbb0c74e929439612a27d6b461": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1f657a11f0e347ad8ba86800bbacde9f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_92ba38d13cfb4891a880fe268778df6e", + "IPY_MODEL_66bc569712af420e8e553e8e3463c0a8", + "IPY_MODEL_a15906ccdc694bc68a19e20f48313469" + ], + "layout": "IPY_MODEL_4a9732e670204eafac847d7fad3f24b9" + } + }, + "1fcda8ebbe7d421884815f2321fe2b11": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "217f7b6b976246278adf81a59debfa5a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8ace8fb00ccc4a09bac71d6ff6deb051", + "placeholder": "​", + "style": "IPY_MODEL_080717aafa8f4512ad924afc5576c4c1", + "value": "Downloading readme: 100%" + } + }, + "2327fc96ad0e40aa8a98c4d29fdaea6c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "24c24151cb864078ac1c99e6f97d1bd9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d4009b89253042708fdbec5960af10e0", + "placeholder": "​", + "style": "IPY_MODEL_f9bc284e1d17477b97139eaa597696f5", + "value": "Extracting data files: 100%" + } + }, + "25b4f1cfa3cc425a8a3b1600a987c3ce": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "26ace754da054f3db4a81f5697819fea": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "28ee9291f1e1418999c9ab4a6924291b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "29615c3f76514ab295a55628e15e1160": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "2a6b1f70708b4caa8121c1ef0cc9b194": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2d8b1e187c754c24abd4357033c1053e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d6749f3d135e4ef2b7cda23d5c0b86d7", + "placeholder": "​", + "style": "IPY_MODEL_5fa9a52011fa4beb92f823d3d1c46a35", + "value": "Downloading metadata: 100%" + } + }, + "322a8d8fe9684c848cca7b97c68bbdcb": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "338c06e339744025b8333bd4301c0a8b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_b7e63291402e4739971f7b8db65faaf8", + "IPY_MODEL_af48af6f97cf4c6aa3f0c1f0f6d59fe4", + "IPY_MODEL_1437c192d7e54418ae9345608d4231b0" + ], + "layout": "IPY_MODEL_18475c77baac42c08d4f9d3839198f88" + } + }, + "34bde1cac94041fcad69d631194885c6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ab9ecfc3e19c44159752543430c5d133", + "placeholder": "​", + "style": "IPY_MODEL_5a6bcac80a134ce2abfdcc92ea925d38", + "value": "Downloading: 100%" + } + }, + "3745898673414b54a7dfcdb964516751": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3a750da3b8034bcaa7c003e32aa5a6bd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_28ee9291f1e1418999c9ab4a6924291b", + "placeholder": "​", + "style": "IPY_MODEL_5fc4cb70f837479dbe27a372baa86059", + "value": " 4.26k/4.26k [00:00<00:00, 179kB/s]" + } + }, + "3c2bbc396857412abec28f3eaf4c5b5c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3cd4ce7d5e9f43fe85bbc4df5b28019c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3fc2b3dd6d2d4b69996908a25b9b3d54": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3ff882aec124413d8dcff4d50346f05e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3c2bbc396857412abec28f3eaf4c5b5c", + "placeholder": "​", + "style": "IPY_MODEL_4404c1a831b144e7a466eadf1bbe18bc", + "value": " 324M/324M [00:16<00:00, 16.4MB/s]" + } + }, + "41da83b4059946aeb2c37067c3b136aa": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_72f5479f320a4869aae13f4ec852d425", + "IPY_MODEL_ff68b3eda7f3401fbc5f2cf52d702c14", + "IPY_MODEL_672f8b67867b40c68c352d0c65238975" + ], + "layout": "IPY_MODEL_0b2e67dfb1844bbd97b956bf37233000" + } + }, + "4277bd6b06e8407ca5e2ac835beac227": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7d15aaf81a844a9384d11eae6e52a052", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_6e1ed941b44f467f8cc847e320ef291a", + "value": 1 + } + }, + "42e24cc126e14bf5a1fd4bf43ad6ca0c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "43991a4fbdce48fc8a816faee5d76b20": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "4404c1a831b144e7a466eadf1bbe18bc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "4a9732e670204eafac847d7fad3f24b9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4b17217df6a84c29945fbbe337abbf62": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c09bac6416c041e595c307f843b5c67a", + "placeholder": "​", + "style": "IPY_MODEL_7be11677747a4a268183d7f2a2cdc212", + "value": "Downloading: 100%" + } + }, + "4b899362f3c742afb097116dfda00607": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a91d2d3b0c264e338913841719956b5c", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_18290fc44a984892a24e2786ce4a0d4a", + "value": 1 + } + }, + "504c5873466a4ddc9a509f41bc44a763": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "53fa9b65775241d78bbd3b6913f8063b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "590646dbf32249c98af9b9b31b0725ef": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "5a6bcac80a134ce2abfdcc92ea925d38": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "5afb5adc1f1e4ac4902d4e21c51a7818": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "5d7196ad4b1548ba87b963b267583019": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "5d95c48258ce4d8bb37ab64cdda30d26": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_677209c8307245838ccfddb67f11d832", + "placeholder": "​", + "style": "IPY_MODEL_2327fc96ad0e40aa8a98c4d29fdaea6c", + "value": " 1/? [00:00<00:00, 1.13 tables/s]" + } + }, + "5dec25ed0f744fcc8a6b948c377b9bfc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "5fa9a52011fa4beb92f823d3d1c46a35": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "5fc4cb70f837479dbe27a372baa86059": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "64fa7b9cd5f34a6895ee16595e81f6df": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "668f188c31a844a6a9aa45869718cd7b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a2af25d5b022473bb462c910cee74a53", + "placeholder": "​", + "style": "IPY_MODEL_86983b8263974f8d8b5c51bd205085b7", + "value": " 1/1 [00:00<00:00, 22.69it/s]" + } + }, + "66bc569712af420e8e553e8e3463c0a8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c7025b8650fc4051a46beacb54ee76c7", + "max": 13077, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_504c5873466a4ddc9a509f41bc44a763", + "value": 13077 + } + }, + "672f8b67867b40c68c352d0c65238975": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e43eaee5d3ff4d03bc1bad37031b21bb", + "placeholder": "​", + "style": "IPY_MODEL_e01a28deac8e4d2683e8bfddfdf3fdce", + "value": " 1/1 [00:19<00:00, 19.19s/it]" + } + }, + "677209c8307245838ccfddb67f11d832": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6af1e65a3d594244a33cda5ac9830389": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6e1ed941b44f467f8cc847e320ef291a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "7132be16062d4328beb324872727b0ce": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_34bde1cac94041fcad69d631194885c6", + "IPY_MODEL_ca4ffd6aabf040c98a8cc91ca1593e45", + "IPY_MODEL_10102a9988b848c9a0f81172bbbd0a35" + ], + "layout": "IPY_MODEL_c3871f07f1094c3c827c37b1d90e3b8f" + } + }, + "717790780b904ed0a4f8ee30ad4af4ef": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "71a3fa014a4744f5a551b6c52ffbd511": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_24c24151cb864078ac1c99e6f97d1bd9", + "IPY_MODEL_4277bd6b06e8407ca5e2ac835beac227", + "IPY_MODEL_8d10bd2fae664a93b3f48397ef64ee09" + ], + "layout": "IPY_MODEL_25b4f1cfa3cc425a8a3b1600a987c3ce" + } + }, + "72f5479f320a4869aae13f4ec852d425": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_93839cc922d94696a08f207274b64972", + "placeholder": "​", + "style": "IPY_MODEL_1fcda8ebbe7d421884815f2321fe2b11", + "value": "Downloading data files: 100%" + } + }, + "752b6dc067284438878a92572fe74bfd": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "78ed12b4b55f4af0ac0a0a674f525374": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cc08910b015e41e58a16f8417a65b045", + "max": 4260, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_7cb8df8659c845db9bf813b6bc854880", + "value": 4260 + } + }, + "7be11677747a4a268183d7f2a2cdc212": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "7c16c33137c74a4c8eb6e45454cfee77": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "7cb8df8659c845db9bf813b6bc854880": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "7d15aaf81a844a9384d11eae6e52a052": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8298a9c05f1341d691378291a344f5cc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "86983b8263974f8d8b5c51bd205085b7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8753fa3c37f345a2adf1af776d389aba": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_de4844e91374458d8e8b4a593984b48f", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_d5cabb26063545bba172d8b9db670ce0", + "value": 0 + } + }, + "8905921ad7e843d5864fb0bbc0fc9f97": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_217f7b6b976246278adf81a59debfa5a", + "IPY_MODEL_78ed12b4b55f4af0ac0a0a674f525374", + "IPY_MODEL_3a750da3b8034bcaa7c003e32aa5a6bd" + ], + "layout": "IPY_MODEL_42e24cc126e14bf5a1fd4bf43ad6ca0c" + } + }, + "8ace8fb00ccc4a09bac71d6ff6deb051": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8d10bd2fae664a93b3f48397ef64ee09": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_64fa7b9cd5f34a6895ee16595e81f6df", + "placeholder": "​", + "style": "IPY_MODEL_7c16c33137c74a4c8eb6e45454cfee77", + "value": " 1/1 [00:00<00:00, 35.09it/s]" + } + }, + "8e5bf0a6382b40828386563657b1bedd": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8f9fced5333e4c698766836267b084bd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_adf003e9917d4a959d0cad14735f6f11", + "max": 324302379, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_a7d83738f6be4d4da4394636ee41a712", + "value": 324302379 + } + }, + "916862871cf74e4ca3dda0a20f6c5871": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "92ba38d13cfb4891a880fe268778df6e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_322a8d8fe9684c848cca7b97c68bbdcb", + "placeholder": "​", + "style": "IPY_MODEL_5dec25ed0f744fcc8a6b948c377b9bfc", + "value": "Downloading builder script: 100%" + } + }, + "93839cc922d94696a08f207274b64972": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "93b5f44097d54bb2b0e0844994723dd3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "94bd515e333348af9d1f0174b3659177": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "982338bb1fd64ae593c5ba45ea7df33f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_0ee80704b0b1450f9c5481c8a530f76f", + "IPY_MODEL_8753fa3c37f345a2adf1af776d389aba", + "IPY_MODEL_c413bd4815d44b17a6b151851dc49666" + ], + "layout": "IPY_MODEL_717790780b904ed0a4f8ee30ad4af4ef" + } + }, + "9fe6950e856949bb8ab87a4297258ec3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_d6b1b99b299a478080aad72a7f4b0ae8", + "IPY_MODEL_8f9fced5333e4c698766836267b084bd", + "IPY_MODEL_3ff882aec124413d8dcff4d50346f05e" + ], + "layout": "IPY_MODEL_ff1d05b7a4814825bbcfa67676fdf265" + } + }, + "a0c71dab400a4781b4eb563a90d89807": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": "hidden", + "width": null + } + }, + "a15906ccdc694bc68a19e20f48313469": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_182c8515eec746f493318ce9f7438c19", + "placeholder": "​", + "style": "IPY_MODEL_8298a9c05f1341d691378291a344f5cc", + "value": " 13.1k/13.1k [00:00<00:00, 444kB/s]" + } + }, + "a2af25d5b022473bb462c910cee74a53": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a333fe7202cc4148b09813a9eb7c7835": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_2d8b1e187c754c24abd4357033c1053e", + "IPY_MODEL_be90780c4aa44cf7b16bcf245a960f59", + "IPY_MODEL_ab1871dc88fe439f852b1652808e35b3" + ], + "layout": "IPY_MODEL_fe409f2089ca42249b35fa5d892ed6d9" + } + }, + "a498c595ea514b9087013c4483af0ebd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_f7349098575d4d859500cf4e3b015e6a", + "IPY_MODEL_f349a6b0d60c47e7a7641aecc19ac179", + "IPY_MODEL_5d95c48258ce4d8bb37ab64cdda30d26" + ], + "layout": "IPY_MODEL_a0c71dab400a4781b4eb563a90d89807" + } + }, + "a7d83738f6be4d4da4394636ee41a712": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "a91d2d3b0c264e338913841719956b5c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ab1871dc88fe439f852b1652808e35b3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_b806c467df834477a7794f74bc30b049", + "placeholder": "​", + "style": "IPY_MODEL_43991a4fbdce48fc8a816faee5d76b20", + "value": " 635/635 [00:00<00:00, 20.3kB/s]" + } + }, + "ab9ecfc3e19c44159752543430c5d133": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "adf003e9917d4a959d0cad14735f6f11": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "af48af6f97cf4c6aa3f0c1f0f6d59fe4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_6af1e65a3d594244a33cda5ac9830389", + "max": 14380029, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_5afb5adc1f1e4ac4902d4e21c51a7818", + "value": 14380029 + } + }, + "b7e63291402e4739971f7b8db65faaf8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_fc9f20c3b880418cb7918532e242cda9", + "placeholder": "​", + "style": "IPY_MODEL_157cef99a08c4aaa8b74ea09b9a73d53", + "value": "Downloading: 100%" + } + }, + "b806c467df834477a7794f74bc30b049": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "be90780c4aa44cf7b16bcf245a960f59": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_1ade57bbb0c74e929439612a27d6b461", + "max": 635, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_e66ca393162a494a9c56c35c8bbddb59", + "value": 635 + } + }, + "bef11d6b389d4513a34d68e18b5c7816": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c09bac6416c041e595c307f843b5c67a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c0e3485b83934987a5efa44efe58a05d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c3871f07f1094c3c827c37b1d90e3b8f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c413bd4815d44b17a6b151851dc49666": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ffe38865177443cb9d4b65b4ca55a8b6", + "placeholder": "​", + "style": "IPY_MODEL_eb62c77d660d47c6906220748b7820c0", + "value": " 0/0 [00:00<?, ?it/s]" + } + }, + "c4ceeb1dab4d4d43bff0f1321f4565c2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "c7025b8650fc4051a46beacb54ee76c7": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ca4ffd6aabf040c98a8cc91ca1593e45": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_f3a5136178754c7d9d116335464c294b", + "max": 70043, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_590646dbf32249c98af9b9b31b0725ef", + "value": 70043 + } + }, + "cc08910b015e41e58a16f8417a65b045": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "cfc7a4a16ab34cc8ab359b18102964d5": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d1b98c4b67b4496084c55c818ab80935": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "d35e26d49c4c454dbde5c061fb708c3f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_1345fff5d7eb436dbef9a9f8018a7b93", + "IPY_MODEL_4b899362f3c742afb097116dfda00607", + "IPY_MODEL_668f188c31a844a6a9aa45869718cd7b" + ], + "layout": "IPY_MODEL_fa68cab4efdb4132982c2c6461f3ffe0" + } + }, + "d4009b89253042708fdbec5960af10e0": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d5cabb26063545bba172d8b9db670ce0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "d6749f3d135e4ef2b7cda23d5c0b86d7": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d6b1b99b299a478080aad72a7f4b0ae8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_93b5f44097d54bb2b0e0844994723dd3", + "placeholder": "​", + "style": "IPY_MODEL_3fc2b3dd6d2d4b69996908a25b9b3d54", + "value": "Downloading data: 100%" + } + }, + "de4844e91374458d8e8b4a593984b48f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "20px" + } + }, + "dfa28a6e7fa84c88b3e89463160348bf": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "20px" + } + }, + "e01a28deac8e4d2683e8bfddfdf3fdce": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e43eaee5d3ff4d03bc1bad37031b21bb": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "e500fc12f99149c7a4ec2e67481550e0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "e66ca393162a494a9c56c35c8bbddb59": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "e8a7d503141d4917918bbc9daf949ccd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_4b17217df6a84c29945fbbe337abbf62", + "IPY_MODEL_f656216b07eb40a2a6b3fd176d284455", + "IPY_MODEL_ea96bd5c08f5485a8d5197f17b43cfb2" + ], + "layout": "IPY_MODEL_29615c3f76514ab295a55628e15e1160" + } + }, + "ea96bd5c08f5485a8d5197f17b43cfb2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_03337e4160434fa1a06d8b47a3c8f9ee", + "placeholder": "​", + "style": "IPY_MODEL_916862871cf74e4ca3dda0a20f6c5871", + "value": " 852/852 [00:00<00:00, 34.5kB/s]" + } + }, + "eb62c77d660d47c6906220748b7820c0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "f349a6b0d60c47e7a7641aecc19ac179": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "info", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_dfa28a6e7fa84c88b3e89463160348bf", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_e500fc12f99149c7a4ec2e67481550e0", + "value": 1 + } + }, + "f3a5136178754c7d9d116335464c294b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f656216b07eb40a2a6b3fd176d284455": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cfc7a4a16ab34cc8ab359b18102964d5", + "max": 852, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_53fa9b65775241d78bbd3b6913f8063b", + "value": 852 + } + }, + "f7349098575d4d859500cf4e3b015e6a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_94bd515e333348af9d1f0174b3659177", + "placeholder": "​", + "style": "IPY_MODEL_d1b98c4b67b4496084c55c818ab80935", + "value": "" + } + }, + "f9bc284e1d17477b97139eaa597696f5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "fa68cab4efdb4132982c2c6461f3ffe0": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "fc9f20c3b880418cb7918532e242cda9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "fe409f2089ca42249b35fa5d892ed6d9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ff1d05b7a4814825bbcfa67676fdf265": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ff68b3eda7f3401fbc5f2cf52d702c14": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8e5bf0a6382b40828386563657b1bedd", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_26ace754da054f3db4a81f5697819fea", + "value": 1 + } + }, + "ffe38865177443cb9d4b65b4ca55a8b6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + } + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}