notebooks/56_fine_tune_segformer.ipynb (6,016 lines of code) (raw):

{ "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 = \"tobiasc\"" ] }, { "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": [ "## Image processor & 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 `SegFormerImageProcessor`. We could use the `ds.map` function to apply the image processor 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", " SegformerImageProcessor,\n", ")\n", "\n", "processor = SegformerImageProcessor()\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 = processor(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 = processor(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=processor.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 image processor 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", "processor.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/tobiasc/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 SegformerImageProcessor, SegformerForSemanticSegmentation\n", "\n", "processor = SegformerImageProcessor.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 image processor. 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 = processor(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 }