{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Computer vision" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "hide_input": true }, "outputs": [], "source": [ "from fastai.gen_doc.nbdoc import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The [`vision`](/vision.html#vision) module of the fastai library contains all the necessary functions to define a Dataset and train a model for computer vision tasks. It contains four different submodules to reach that goal:\n", "- [`vision.image`](/vision.image.html#vision.image) contains the basic definition of an [`Image`](/vision.image.html#Image) object and all the functions that are used behind the scenes to apply transformations to such an object.\n", "- [`vision.transform`](/vision.transform.html#vision.transform) contains all the transforms we can use for data augmentation.\n", "- [`vision.data`](/vision.data.html#vision.data) contains the definition of [`ImageClassificationDataset`](/vision.data.html#ImageClassificationDataset) as well as the utility function to easily build a [`DataBunch`](/basic_data.html#DataBunch) for Computer Vision problems.\n", "- [`vision.learner`](/vision.learner.html#vision.learner) lets you build and fine-tune models with a pretrained CNN backbone or train a randomly initialized model from scratch.\n", "\n", "Each of the four module links above includes a quick overview and examples of the functionality of that module, as well as complete API documentation. Below, we'll provide a walk-thru of end to end computer vision model training with the most commonly used functionality." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Minimal training example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, import everything you need from the fastai library." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from fastai.vision import * \n", "from fastai import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, create a data folder containing a MNIST subset in `data/mnist_sample` using this little helper that will download it for you:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PosixPath('/home/ubuntu/.fastai/data/mnist_sample')" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "path = untar_data(URLs.MNIST_SAMPLE)\n", "path" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since this contains standard [`train`](/train.html#train) and `valid` folders, and each contains one folder per class, you can create a [`DataBunch`](/basic_data.html#DataBunch) in a single line:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "data = ImageDataBunch.from_folder(path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You load a pretrained model (from [`vision.models`](/vision.models.html#vision.models)) ready for fine tuning:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn = create_cnn(data, models.resnet18, metrics=accuracy)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now you're ready to train!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Total time: 00:09

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "
epochtrain_lossvalid_lossaccuracy
10.1460380.0956420.965162
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "learn.fit(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look briefly at each of the [`vision`](/vision.html#vision) submodules." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting the data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The most important piece of [`vision.data`](/vision.data.html#vision.data) for classification is the [`ImageDataBunch`](/vision.data.html#ImageDataBunch). If you've got labels as subfolders, then you can just say:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "data = ImageDataBunch.from_folder(path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It will grab the data in a train and validation sets from subfolders of classes. You can then access that training and validation set by grabbing the corresponding attribute in data<\\code>." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ds = data.train_ds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Images" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That brings us to [`vision.image`](/vision.image.html#vision.image), which defines the [`Image`](/vision.image.html#Image) class. Our dataset will return [`Image`](/vision.image.html#Image) objects when we index it. Images automatically display in notebooks:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAAcABwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+f+uh+GHwj+K3xt8WweAfgx8MfEPi7Xbr/j20Xwxos9/dzcgfLDAjO3JA4Heuer9Sv2IP+C5f7Tnw9+HHws/4J5f8Eqv2Q/Afw+8aa/p9j4c17x2ujx6rrXiLWZJ0B1L540jQYMhMc63CqHJDKEFAH51fG79mv9ov9mfW7Pw1+0f8AvGvw/1LUbU3Wn6f438K3mkz3UAYoZY47qNGdNwK7gCMgjORXFV+r3/B1/8AtWS+Pv2mvhn+xJF8ULvxjc/Aj4f2+m+M/EWpaWtvcX/iS4SM3c7fuwSZIIbOU7GMe6Vgo+Uk/lDQAV+lf/Bvj8LvCvwLsfjH/wAFkPjTYz/8Ip+zt4Pmi8K+TCpluvFWor9ls/KEuIZfKSVtyM2Ve5t2weM/mpXrWvfttftBeIv2MNB/YFv/ABNbD4beHvGt14qstLhsUWaTUZofJ3Syj5nVFM2xeMGeTJYbAgBwXxR+Jnjn40fErxB8X/id4gk1bxH4p1q51bXtTmRVa6vLiVpZpSqAKu53Y7VAUZwAAAKwqKKAP//Z\n", "image/png": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABHNCSVQICAgIfAhkiAAAAchJREFUSIntlbGq4lAQhv+rKwQxoEQOiEIaSy3s7X0DIWBjo/gAausb2FlZ2YhpBHtBsRbExsoUYhVELRQ0MM4Wu6TZgOfoXat7YCAJ55/v/DOZ5AsA44Mr9EnYD/AH+BmgruuoVCoYjUZgZjweDzAzmBmWZUnlYJnIZrNcrVZ5tVoxEQWG67qcSqWe5XoOK5fLvNvt/gHc73fu9/v+/el04nw+/z5wOp0yEfH1euX1es2O43CtVmMhBAshfGC73X6a65ds74gIvV4PzWYTmUwG+/0eAFCv1/092+1WKtfTUyWTycDe5HI5dl3XdxiNRr/H4eFwCHxeKBRgGAYAYDwew/O873EYFIZh8Hw+ZyJi27Y5FotJ6V4efMuyUCwWAQCapuFyuUhrX3I4GAyYiPh8PrNpmipadZiu6/7LMpvNVPXqwE6nw0TEw+GQNU1T0r7Uw0ajAQDwPA+3201JqwwslUpIJBIAgM1moyoHoFCOdDrNjuMwEXG32+VwOKzcDiWHQgiYpgkAWC6XIKL/5zASifBkMvFHIR6PvzRO0sBWq+V/MyX+ee+XNBT6s3WxWOB4PMrXL2BJnUwIwbZtv+UOAH/9vfjY+g2j1h9i6j0xlAAAAABJRU5ErkJggg==\n", "text/plain": [ "Image (3, 28, 28)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "img,label = ds[0]\n", "img" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can change the way they're displayed:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "

" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "img.show(figsize=(2,2), title='MNIST digit')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And you can transform them in various ways:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAAcABwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+f+vpD9hD/gkx+3l/wUjh1vU/2Ufghc6xpPh+EtqWv6hcx2WnrLxi2S4mKpLOQQfLQllU7m2rzXzvpUFhc6pbW2qXptraS4Rbm5EZbyoywDPtHJwMnA64r9y9S/4K7fBH9j79oX9lb/gm9/wTw+IMEvwv8FeJtFuviB4z0K/VV8S3V2gjmhkcxsQqmZzIA7qxcJt/dDIB+HXiXw5rPg/xHf8AhPxFZNbahpl5LaX1s5+aKaNyjofcMCD9Ko19h/8ABfL4JwfAb/grV8ZfCWm6Ja6fp+o+IxrOl21i7tCsF5ClwNhYDjc7DC/KuCowBtHx5QAVPpmoXWk6lb6rYymOe2nSWGQEja6sCDxz1FQUUAfpD/wci6d4f8b/ABk+CH7XGgW9kp+MPwK0bW9RntUmD3F2ieVLJIZeWbIwDydqrlmGMfm9X2z8LvDXiX9uv/gnn8QPiP8AtF/FrxRq0/7O2j6bpvwy0+O7gW2s7S6kk82GQNCzyLmNSPnBBHXmviiRQkjIOgYgUAf/2Q==\n", "image/png": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABHNCSVQICAgIfAhkiAAAAq9JREFUSIntlj1LK0EUht/JTrJsCAnBFCKCSBAVyTY2Soo0orVNSCnkN2glYmfhX7C2tYxFQFDQQg3BdIFNVIK4CdnoZs2y2R3P7eTKxXwYY3UPnGbmnXlmzpmPwwAQftF8vwn7DxyL8e8MSqVSmJ+fR7lcRqFQgGmaQ42nYXxvb4/e39/JMAyq1Wq0vr5OiqIMM8dgwtnZWcrn8ySE+HDLsmh3d3eoBQ+Uw7m5OWxvb2N5eRndbhc3NzcAAEVRMDk5iYWFhZ8LKeec0uk0PTw8kOd55DgOZbNZOjw8JCEE1Wo1isfjxBj7mZCqqkpnZ2fU6XSo0WjQzs4ORaNRymQy9PT0RI7j0P7+Pvl8vtFDGolEsLa2hkQiAcuyYBgGLi8vYZomGGMIhUKQJAmO48DnG+yG9VTF43FsbW0hGAyiWCxic3MTd3d3EEJA0zQUCgXouo5wOAwhxOhAWZZh2zaICLe3t3h8fPy4c7quQwiBiYkJJJPJgQ9OT+DV1RXy+TyOj49xdHQEy7I++mzbhqZpkCQJMzMz6Ha7AwH7vjQHBwfgnKPT6Xxqb7VaqFar0HUdkiRhZWUFmqb1BfbNtGVZeHl5+WcHruvi4uICsiyj0WigVCqBMTY6sJfd39/j+voa4XAY6XQaRP3/8pGAtm2Dc47p6WmoqgpVVccLbDabyOVyYIwhEAjg+fl5vEAAqNfrMAwDiqIgkUiMF+j3+/H6+opgMIjV1VVMTU2B894HfySg67oolUo4Pz+H53lgjPV9cUYOqWmaCAQC4JwjEolAkqTxAqPRKOr1OjzPw+LiImRZ7qn/Vk3zt1UqFZyenuLt7Q3FYhGu6/bUM/xA5a0oCmRZBhEhFouh2Wyi3W5/mc+hapKvnDFGS0tLlMvl6OTkhDY2NigUCpHf7/+k+wOXq6Soj0795wAAAABJRU5ErkJggg==\n", "text/plain": [ "Image (3, 28, 28)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "img.rotate(35)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data augmentation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[`vision.transform`](/vision.transform.html#vision.transform) lets us do data augmentation. Simplest is to choose from a standard set of transforms, where the defaults are designed for photos:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function get_transforms in module fastai.vision.transform:\n", "\n", "get_transforms(do_flip:bool=True, flip_vert:bool=False, max_rotate:float=10.0, max_zoom:float=1.1, max_lighting:float=0.2, max_warp:float=0.2, p_affine:float=0.75, p_lighting:float=0.75, xtra_tfms:Union[Collection[fastai.vision.image.Transform], NoneType]=None) -> Collection[fastai.vision.image.Transform]\n", " Utility func to easily create a list of flip, rotate, `zoom`, warp, lighting transforms.\n", "\n" ] } ], "source": [ "help(get_transforms)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "...or create the exact list you want:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tfms = [rotate(degrees=(-20,20)), symmetric_warp(magnitude=(-0.3,0.3))]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can apply these transforms to your images by using their `apply_tfms` method." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig,axes = plt.subplots(1,4,figsize=(8,2))\n", "for ax in axes: ds[0][0].apply_tfms(tfms).show(ax=ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can create a [`DataBunch`](/basic_data.html#DataBunch) with your transformed training and validation data loaders in a single step, passing in a tuple of *(train_tfms, valid_tfms)*:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "data = ImageDataBunch.from_folder(path, ds_tfms=(tfms, []))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training and interpretation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now you're ready to train a model. To create a model, simply pass your [`DataBunch`](/basic_data.html#DataBunch) and a model creation function (such as one provided by [`vision.models`](/vision.models.html#vision.models) or [torchvision.models](https://pytorch.org/docs/stable/torchvision/models.html#torchvision-models)) to [`create_cnn`](/vision.learner.html#create_cnn), and call [`fit`](/basic_train.html#fit):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Total time: 00:09

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "
epochtrain_lossvalid_lossaccuracy
10.2005390.1119280.961236
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "learn = create_cnn(data, models.resnet18, metrics=accuracy)\n", "learn.fit(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can take a look at the most incorrect images, and also the classification matrix." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "interp = ClassificationInterpretation.from_learner(learn)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXEAAAGQCAYAAABYn1CDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXe4FsX1x7+H3qsggqFIVEDsBSMIKCiI2ECwoEiCDWMSxW5iRFGUImg0/jSCghRbEhvWKIgIigVRAcFGsdHrvSAozu+PmbvMLrv7lvuWO+/9fp7nPvfMntnZs3t2zzt7dnZHlFIghBDiJhXybQAhhJD0YRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRDPMiLSVUSU+etqlg0rWZahbSw37U3MRHuFSLLHXEQmmnrLc2RamSGT55GIDLLO+5ap1AvzAc/xaBjE88N3AOaZv6QI+zGw+Ni09XXmTAy14TCz/bMz2GZSF3s2EZGrRGSXiDTOx/aDZOM4l2HWYve1sCOm3h7nOAO7plK+DSjriEgVpdTOTLaplBoPYHwG2zsrU20l4EwAPwF4NUfbyxVnAnhXKbVGRPJtC5DB45yN8zeTKKVeAvBSEvVydY47R7npiVu/2o+LyHARWS0ixSIyTUTqBupMFpF7RGQdTG9ZRKqIyC0islREdojIerPuvoHtXC4iK0Vkm4i8CKBZiC2ht/Yi0l9E3hGRrWb9hSJypogMAzDTqjrT7oGE9UhEpIGIPGBs+VlE1ojIEyLSOswOETlBROaLyHbz/9iQw3gmgDeVUkUi0kJEXhGRb8062429V4kVCUVzuYh8ZPapyMjHGXsfs9pfZmwZZtZVdtkse8sse8taNlpEFonIJrOvP4jIJBHZJ2Qfgr5oCKATgOdi6lQUkWvMNnaIyBYRmSEi3QJ17hCRr8yx2CgiC0TkbqtOTxGZY3TbRWSZiDwrIq1ijrN9p3KGWf8nEflSRM6y2rbr9ReRD0VkJ4BeRt9JRF4Tkc1mH5aKyF9FpHL4LsstIrJKAteIUV5r9m2DOd5rReS/InJAxCFsJyJvJ2F3yxgfeOe4iLQUfe20MOqLrDZ6WHJba/0/mGXbRaRe1HacRClVLv4ALAegoHs4mwAsNWUF4OlAnR3m7zMAs43uRaPbBeBTABtMeQWA+qZOL6vN9dC3fkXWsq6m3rCSZZZ911j1tphtFJm6FwNYbOkXA3gPwC0BuyeacjVjuwLwC4BFALab8loA+wbtMMdlCYCfTXk5gEqWfS3N8otN+ShT/hbAfACrrbb+aK13v7V8g7FrO4BBAG4xx6hE/7HZr5JtlCwfZrX3lln2lrVsofHpZwA+B/CrqfO+VWePY26WDzLLf2vKE0v236oz3rLlKwDrsPtcOMXU+ZN1vD+BPr9+AvCV0e8FfU4pACsBLIA+RxSATjHHeRD29NEWa1sHh9TbAeB7AF8COANAV8uvG+E/958IuUaKEHGNmHrTTZ3F5pj/gt3nQrUQe4qStLtljA9KbJsIYB/o86TkeK415fcAiNlvBWC0tf7LZtmT+Y5FGY9t+TYgZzu6+yRYD6CxWXavWfYrgP3gD+KHmDoVAXS2TrSTzfJ65uRRAP5qls0qOfkA1DXLJlvrdjXLhpUsM+Ua2B3s5wGoZy1vY+SuwXbCTnBT/r1V92yzrL11sd0TtAPAn8yyP1vL2ljbuAo6aDW29r+lpa9g7X/JD19L7A6oz2P3BV4fQCsjD0LgIrbaTDaIHwKgglW+2Fq3ddgxt+o+B2ChVZ5Y4kNTbm3twwNmWW0AX5hlH5llJT9WE6y2qgM4zshHYvcPdI2A7Y1ijrN9fO4wy/bF7vNlUki9qSXHA/r8LfHLSuzucNxt1S8JqMuR4Boxyw4CUNmyubvVVrdS2N0yzAdh53jUMrP8arN8FXTKuC52B/ye+Y5Fmf4rN+kUi7eUUmuM/JT5L9AnZgkzlVKfAoBSaheADpbuNXMrtxG6dwUAJamHg0vqKKU2G/npJGw6CEBNIz+olNpktr1NKbUkifWDHG3+7wTwH9PWQujePaB70UEmm/+LrWV7W7KXNzblnwFcLyIrRORn6MDT2eiaWnaUpFbGKqV+MrZsVEotS3mvojkUwAcmVaMAPGLpmkasAxGpAeBkxKRSoINvyT5MAwCl1Fbo3igAHCYiFU1ZAfiDiPwoIrMA3AkdtAF9N/QN9A/AGhH5WESmAGgH3bMvIXicbZ4y2/8OwByzrH1IvfuVUr+auruw+3x4VSm10d4XQ/B8SHSNNIdO6W0RkV8B/M9aN+x4J2t3pngMwDbo87c3gNMBVAHwA/y2FgR8sBnO6hjd+9AXq83KLNqSE0p+OKB76yUI4Msb32jp7oXu8QL69nUDdK91L+jeXyax26trK0SkE4BJxtb10D9CtQC0DVk3yMnQveW4IJ4USqnXROQIAP2gf1QOh/5Ru0RE2imlvhWRIwFcCN0paAfgfAADoNMD4yKOczrEnb+lQkT2gz5eVQBsBfARdBw5zFTJtO9TRim1SUSeADDY/O0yqinmR62gKI898S4i0sjI/azliyw5GKQ/sOSxSqljlVLHAvgdgOsBPGx0C83/k0WktpGTGSa2CECxkS8XkToAICLVRORAs3ybVb8m4imxtwqAvqat9tC37gDwYRI22ZwGfXHawa7k7uN1pdQB0Ome70PsKDmWV4lIVWNLXeshVtx+lfQGW5v1fos9e3AdsLunfLBS6hgAjyfcI82ZAL5TSsUdj4+sfTjP2FEbuocHAAuUUrtE5BAAa5VSf1VK9YbuwQP6B+UY49O20CmZC5RSRwB43dQ50fwPO842/cz2mwI4zixbGFIv6vztKSL1jXy+pQ/uf9w1cjj0eQUAPZRSRwMYGWFvqnanSsm5E3Y9/NP8PwVATyNPysA2yx75zufk6g/xD22eCdSZGLL+y1b9L6Af6JQ8qBlk6vS26qyDfmj3k7Wsq6k3rGSZ1X7wweYn5v8wo28InR4pyVm+h935bp/dCH+wuQ27HwLt8WDTsqNriL2+vLFZNtWqt9S0W/KgbrlVz36wuR46pbPNOmaHWPofzX51NLpplm6WOaa7YOXEAZwUOOafW3ZEHnPoYLkOJs9t2TsxZB+SebB5B3TeeCV04C95XvILgDYAfmvKG8wxWGK1eWfMcR5k1Ssy+7fZ2v4hIfVaBtroitI/2Cy5Rtpg97OVzdDn2Vqr3qDS2h3hgxLbJlrL/mu19xGAxwL7Pddq+31bV0h/5bEn/h8A90Dflm+DztddksR6ZwG4FfriawH9kOYb09ZbAKCUmg7gSugeaU3oID4kGaOUUvcAOAf6xKsA4ADop/2fGP166IeO30I/GOwAoElEWz8B6ALdG/nRtFVs9vVYpXOTSRGTNx4K/bCyCDrPOxp6BE+QPwO4AnrkSQ3oB8ifQ6dgoPSzh+HQKYAmZr9KeotDoccQFwFoBd3jeyewr/8DcAN0vrM6tH+SOebHQ/8wJpNKuQzAddCpmt8AqAo95PNkpdQrps4s6B96gb5bqATty75KP9dYD52r/RH6gW8L6PNjJIDbkszP94cOmFXNuueY4xeLUuotACdA9/wrQB/LL6BHBw0MWSXyGjH78gcAy6B75Otg7lAybXcS/A36R38ngCOw+5lUCf+05MLshQMQ84tV8Ih+hbcF9FPxQfm1xh1E5EwAzwI4WsWnHZxCRO4FcBH0yJBfEtXPgT2hx1lEBmH3WPpWSqnlubfOTcwzio+g74abKaU25NmkrFAee+IkNbYB+FshBXDDYuhhlXkP4IZCPc45R0Taisg06DtFQA/7LMgADnB0CkmAUup17H4AVzAopf6VbxtsCvU454m9oVM8xdBDfK/PrznZpdykUwghpBBhOoUQQhyGQZwQQhyGQZwQQhyGQZwQQhyGQZwQQhyGQZwQQhyGQZwQQhyGQZwQQhyGQZwQQhyGQZwQQhyGQZwQQhyGQZwQQhyGQZwQQhyGQZwQQhwm50FcRKaIyI8iskVEvhCRi0Pq3CQiI0RkgIgUWX/bRESZWcOj2q8iIutEpFZMnf1F5CcRmRJTp56ITBKRNeZvWEidv4jIMhEpFpHPReSABPv+moicHLJcRGSkiKw3fyNFRMLaMPXPF5EVZrvPiUgDS3eliHwoIjtEZGKcPZkk4KciEdklIvcH6pT4tZ2xcaP5e0NE2iVoPyN+NfWOEJG3jZ2rReQvlm65iGy39iPhN75FZGmY70Wkqog8as71VSIyNEE7V5t6W8x6VS3dcBH5TER+CTsXs4VD1+vVIvKNsfMHERknIpUs/WEiMltENovIdyJySxL7/rCIXBqzvVBfhdTtJiJLzPGYKSItLF1/EZlrdG8lsimUXE/qCeAgAFWtSVdXATgyUOcdAJ1C1h0EPUefxLTfHcAbCWx4HcBsAFNi6jwG4BnoeSFbmu3+3tJfDD3hbTvoeRVbA2gQ015N6HkWq4boLoOelHZfAM2gZ525POb4bQXQGXom9WkAnrT0faBncf8/hEz4nCMf14KeF7NzmF8B1DPHVKAnLP4zgE8TtJkpv+4FYA2AAdBzPtYG0NbSLwfQPYV9bQ3gqwjdXcae+tAz3a8C0DOibg/oeUYPMvXfAnC3pb8Ieub252Emz86RL125XlsDqGfkBgBmABhq6RcDuNOcb62h5zo9PcF2V8JMKp6Kr0LOt80A+kFPYD4awHuB/e8P4O8wk3+n+pfznrhSapFSakdJ0fy1LtGLSH3oiX3fDVn9IgCPK7P3EfSCnrA2FBE5F3om7zcTmHoagFFKqW1Kz2s4AXqCWIhIBehJk69WSi1Wmq9V/BRQ3QDMsfbd5iIA9yilvlNKfQ89Se2giHYGAHhRKfW2UqoIerLbPiJSGwCUUv9VSj0H/YORL/pCB8rZJQtsvyqlNimllhs/CvRs5b9N0Gam/DoUwGtKqalKqR1Kqa1Kqc8T7lE0p8bYdRGA4UqpjWYbjyDarxdBTyO2SCm1EXryaK+uUmqS0pMyby2FrSnjyvVqrr9NJasB+BX+c6olgKlKqV1Kqa+hf3gOitnuIQA2qfBJxWN9FaAPgEVKqWeUnsB8GIBDRaSNsfsNpdTT0BN9p0VecuIi8qCIbIOemfxH+J3YA8CbSqldgXVaQPc+H0/QfC/oGdLDtlsHwO3QF3JSpgbk9kbe1/y1F5FvRadUbjPBPWW7oE+mT6zyJ4g+wXx1zQm5E/pCKiuEXbx7+FVENkFPYns/gBEJ2syUX48FsMHcwq4RkRdFpHmgzlQRWSsir4vIoenYZYLbPkjTr0beW0QaJth+1nHlehWdZtwCYB2AQwE8bKnvBTBQRCqLyIEAfgfgjXTsQmq+Cl6vxdB3J5E/IKmSlyCulLoC+jb2eAD/BWD3TqN6NgMBzFZKLYtqV0RaA6iklFoaUWU49C9o2K9rkFcB3CgitUXkt9C98BpGt6/5fzKAgwGcAD2n3+CY9uJ6HLWgb7lK2AyglkhoXjxYt6R+7Zht5wxz8XYBMCmg2sOvSql6AOoCuBLAxzFtZtKv+0L/yPwFQHMAywA8YekHQPfaWgCYCeA1EakXYVcNAEdD304HKcnxBv0a5aewcwAx9XOGI9crlFLTlFJ1oDs0D0GnPEqYDuBsANuhf4wmKKU+iGku7g4rFV9l/XrN2+gUc1vzDvRFNQTw0hQnQQfQIAOxZ2AI0gvAK2EKETkMOv80LkkT/wzt8C+h85BPACg5mbab/6NKUgPQv/q9IrZ9MIDNSqlvI7ZVBKCOVa4DoCjiNjRYt6R+Tm+zY7gQwDv2xRvnV9MzeQjA4yLSOKLNTPp1O4BnlVIfmNvb2wAcJyJ1jT1zlFLbTRrtLuhb+eMj2uoGYG5EiqzI/A/6NcpPYecAYurnFAeuV9vWLwEsAvCgaauBsfF26Lz0bwD0EJErIrZdDzr/PzdiE6n4KuvXa1kYYlgJu3NsRwNYoZRaa1cQkY4AmgL4d4K24nq7XaF7WCtFZBWAawH0FZH5YZWVUhuUUgOUUk2UUgdBH6v3jXopdArDDrJp5/2gTzj7tv1QsyxhXRHZD/oB3Rcx7eeSsIs31K8WFaDvcppF6DPmV+iH0cn6rUQfNVIo0i6TK/0RafrVyKuVUvl8thFGmbxeE9i5H4BdSqnHlVK/mJ79k4jodEGniGYEU0QWqfgqeL3WNHZFnQepk87T0HT/ADQGcC70LUZF6INVDPOUGLpX9PeQ9f4FnWONa7sG9MO8ajH6JtbfGOiTrFFE/dYAGho7T4HOsx1k6R+HvkWrDd07WQJgcERbsxAYqRHQXw7gc+gg1tQ4OG50yhbo3mFNAFPgH51SCbq3cReAyUaulCP/Hmf8WTuw3OdX6N7b4ebY1gHwD+gHO3v4Lgt+PRHARgCHAagM3dObbXTNAXQEUMUct+sArAXQMKKt5QCaxxyPu43v60P37H5E9OiUntAjP9pBj96ZAf/olMrGpmkA7jByRV6vXv2LATQ2cjtzDY015TrQd1TnQ3cYmkA/iB0R0dYkAANjbI/1VaBuI+j0SV/js5Hwj06paJZfDuBtI1dOyU/ZPAkidmiWOaBbAHwG4BJL/yGAowLrVDP1uyVouzeA6SnYMgzWkCXooFhklftDB5ZtABYA6BFYvw70r/lWAN9CDxHaYyiVcfJaxARS6J7eKAAbzN8ouy3oW7LjrfL50MOfiqFTPQ0C+6UCf8Ny5N+HAUwOWe7zK/RwqyVmv9ZCP0A6JBd+NcuGAPgeOpi/COA3ZvlB0D31YugA82bwfLTaaA9gYQJbqgJ41Jzrq+Ef8tbc7H9za9lQU28L9BDXqpZuYohfB2XZny5dr4+ZY1cM/eM6GtYPBPSP9wfQAXUV9EihGiHbEaNvnMCeOF8tAjDAKnc35/t26OcnLS3doBC/TkzFT2Iayjsisjf0w61mKg2jRORB6IvqwYwbVwpEpD+As5VS/fNtSz4oYL9eD2AvpdT1+bYlHxSwX48B8IBS6ph825IslRJXyRl1AVyTzglhWADdqyprbEIaD2cKiEL163KUTbtyRaH6FdDvgDhDmemJE0IISZ2yMDqFEEJImjCIE0KIw+Q0Jy4izN3kEaVU5JcRSwP9ml/o18IkWb+yJ04IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ7DIE4IIQ5TliZK9qhcubKv3LBhQ09u166dT7fXXnt58tFHH+3Jp5xyiq9ejRo1PPnf//535LbHjh3rK2/evNmTt2/fHmc2IYTkHPbECSHEYRjECSHEYRjECSHEYUSp3M2FGjfxatOmTT35z3/+s0937bXXJtu+J6e7X3YbADBnzhxPvvXWWz155syZabWfTwpxQt0DDzzQk0eMGOHTnXnmmUm1UaHC7r7Mr7/+6tNt3LjRkx966KHINpYtW+YrT5w40ZN37dqVlB3p4qpfK1as6Ml///vffbrDDz/ck3v37h3Zxtq1a33latWqefK7777ryQsWLPDVs325fPny5AzOMZwomRBCygEM4oQQ4jBlJp0yatQoTx46dKhPt379ek+eP39+XPueXKtWLZ/u2GOPTdZGX9k+Pva2u3Xr5qu3devWpNrPJ67edsdhDyV98cUX02ojE2m4IEcddZQnB2/lM42rfu3YsaMnz549O5ub2gN76PC8efN8usGDB3vy999/nzObgjCdQggh5QAGcUIIcZgy88bmuHHjPHny5Mk+XVFRkScHRwFEUb16dV+5e/funnzdddf5dMcdd1xSbR5xxBGefOqpp/p0Tz75ZFJtkMyybds2T96xY4dPV7VqVU8Onjd2+u7nn3/25N/97ne+eo0bN/bk0047rXTGEh/2CJQg9iihn376yad78803PTmY7jj44IM92X6D2z4XAKBu3bqefPLJJ/t0L7/8sif//ve/9+ni0rn5gj1xQghxGAZxQghxGAZxQghxmDIzxDCXBPPlTz/9tCf36tXLp4s6PsE8Xb9+/Tz5lVdeKa2JWcHVoWjJ8qc//clXPuywwzz5j3/8o08X9F8U+++/vyd//vnnkfW2bNniK9u59aVLlya1rXRx1a9z58715OAQYHtYpv0sKhVatmzpyXZ+HABuvvlmTz700EMj2wgOD03XlnTgEENCCCkHMIgTQojDlMt0ShwvvfSSr9yzZ8+U26hTp46vXFxcXCqbMoWrt93Zxr7tbtOmjU93ww03ePLxxx8f2cYjjzziKw8ZMiQzxiWBq36NS6eMHz/eky+99NKMb9ueJGb06NE+ne27X375xaezbbE/cpYNmE4hhJByAIM4IYQ4DIM4IYQ4TJl57b6sYH/BDAC+++67lNt44YUXfOXgFw9JbmjdurUnf/311z6d/aq1nc9u1qxZ0u0/++yznmznzknpiRvOmQnszzUMHz7cp7O/jGk/LwGA9u3bZ9WudGBPnBBCHIZBnBBCHIbplAD2nIoAMGPGDE8+8cQTk2rDnhAAANq1a+fJixcvLoV1JI6TTjrJV3700Uc9ec2aNT6d/bU7e67HuCG3mzZt8pXvvPNOTw6+sUkSY3+NMDjE0L7W7C+cZoMGDRr4ysEUSlmHPXFCCHEYBnFCCHEYBnFCCHEY5sQDBGeHSScnbs9KAiT/xTxSOoKvxe+zzz6hcrosX77cV872BMiFzm233ebJI0aM8OmC11A26dy5c9J1161bl0VL0oM9cUIIcRgGcUIIcRimUxJwzz33eHL9+vU9+ZprrolcJ/gVw8cff9yTO3XqlEHriJ3iuv7667O6rUaNGvnKLVq08OQVK1ZkdduFiP2FwODXAnNJzZo1I3U7d+70lYNvY5cF2BMnhBCHYRAnhBCHYTolQJMmTXxl+2M4rVq18mSR6O+1V6jg/22sW7euJ1etWtWnC46GIalhf6Bs+vTpPt2qVas8Ofgmro3ty+Bbn0ceeaQnBz+O1bZtW09mOsVd+vbtG6kLvmFdFt+4Zk+cEEIchkGcEEIchkGcEEIcptzkxPfbbz9P7tChg09nT4Z8wQUX+HRRX7WL+9pd8G0zO3f64osv+nQ33nijJ8+fPz+yTRLOF1984clnn312Wm3YzynsySIAf748+Ibmq6++mtb2SNki7vnWnDlzcmhJerAnTgghDsMgTgghDlOw6ZTatWv7yk899ZQnH3744bk2xyP4Ea3nn3/ekw855BBPjhsSRzJLlSpVPPmII47w6ey02datW3NmE9mNPWkH4J87NfgWrT0kOA47BsTFgwMPPNBXtlOxixYt8uSioqKktpsN2BMnhBCHYRAnhBCHYRAnhBCHKdicuP3FQQDYsGFDUusFh/nZeS+b3r17+8r16tVLqv0ff/zRVx45cqQn79q1K6k2SGY59dRTk6r3wAMPZNmS8ksw733VVVd58jnnnOPTBScizybdu3ePLC9ZssST7Um5AWDMmDHZNcyCPXFCCHEYBnFCCHGYgk2nrFy50lc+/fTTPdn+qmCQ4uLi2HIJl112ma/8z3/+Mym7Fi5c6CvzFj3/3HLLLZE6+yuTmzZtyoU55ZK77rrLV7722mvzZImfLVu2+Mpvv/12aL18ThbBnjghhDgMgzghhDgMgzghhDhMwebEg9i5zTVr1pS6vXfeecdXtnPnwYmS7a8aBl/j3WeffTw5OPyQZA8759qmTRtPDn6dcu7cuZ78xhtvZN+wckrLli0jdcFJlIPPlWzsz1jY+ezg1wj79+/vyUOHDvXpXnvtNU8+99xzfbrNmzdHbjtfsCdOCCEOwyBOCCEOU27SKZkm+Cbn8uXLPbl9+/Y+nX2L3qBBA5+uVq1amTeuHHHsscd6cnASW/t2OjhhxIgRI0Lb++CDD3zl4CQhJDtcd911vvKdd97pycF0StRb1KnQr1+/SN2zzz7ryWUxfRKEPXFCCHEYBnFCCHEYplMyxOTJkz3Z/qhVEHtOSADo1KmTJ3/55ZeZN6zACE7aYI8k6NKli09nz506ZMgQn65ChfD+y9SpU33l1atXp2UnSY0VK1bEljON/REte+QasOc8uGUd9sQJIcRhGMQJIcRhGMQJIcRhJPiGWlY3JpK7jeUYe8LWGTNm+HRt27aNXM/+Mp79Nuf69eszaJ1GKSUZbxS59euUKVN8ZfuNuu+++86n23vvvT25cuXKkW3OmzfPk3v16uXTuTDErBD8mmtmzpzpycG3RVu1apVja8JJ1q/siRNCiMMwiBNCiMNwiGGGWLt2rSffdNNNPl2fPn08uUaNGj6dnYYJDnUimiZNmnjykUceGVlv3333TbrNhx56yJNvuOEGT46aBIS4TXCuzI4dO3ry+PHjc21ORmFPnBBCHIZBnBBCHIZBnBBCHIY58Swwffr02DJJjVWrVnnyN99849Ptv//+kevZee/ghA725AG5HGZL8kNw2OB7773nydOmTcu1ORmFPXFCCHEYBnFCCHEYvrFZjuCbfYUJ/VqY8I1NQggpBzCIE0KIwzCIE0KIwzCIE0KIwzCIE0KIwzCIE0KIw+R0iCEhhJDMwp44IYQ4DIM4IYQ4DIM4IYQ4DIM4IYQ4TM6DuIhMEZEfRWSLiHwhIheH1LlJREaIyAARKbL+tomIEpHIObpEpIqIrBORWjF19heRn0RkSkydq0XkG2PnDyIyTkQqWfrlIrLdsu31JPZ9qYgcELK8qog8ara1SkSGJmjnalNvi1mvqqUbLiKficgvIjIskU2ZwiG/ioiMFJH15m+kiIil/5fx068iMijJfc+qX0WksYg8Yc7DzSIyR0Q6JGNbacmnX5PZtlW3qrlGfxCRjSLyoIhUtnQTRGSFiGwVkQUickoS+/6wiFwaoYu8BkPqdhORJeZ4zBSRFpZujIh8aexaIiIDE9m1B0qpnP4BOAhAVSO3AbAKwJGBOu8A6BSy7iAAX8OMqolovzuANxLY8DqA2QCmxNRpDaCekRsAmAFgqKVfDqB7CvvdGsBXEbq7jD31AbQ1x6RnRN0eAFab41gfwFsA7rb0FwE4BcDzAIbRr3vUuQzAUgD7AmgGYDGAyy39HwF0A/AhgEGks3DZAAAfV0lEQVRlwa8A9gMwFMA+ACoCuBTAOgC1CtmvyWzbqnurOdYNADQC8B6A24yuJoBhAFpCd1x7A9gKoGWCfV8JYN9UfBVSdy8AmwH0A1ANwGgA71n628y+VQDQAcBGAMel5KNsnwQJDtKBAH4E0N9aVh/AGgAVQ+rPBHBrgjbHwgq2IfpzATxtnBp5sQfWaQjgDQAPWsuWI7Ug/mcA/4jQ/QDgZKs8HMCTEXWnARhhlbsBWBVSbwpyGMRd8SuAuQAutcqD7YvKWv4OkgviOfWrpd+CiIBWSH6N23ZA/yGAflb5fADfxrT3KYC+MfpDAHxaWl9B/+DOtco1AWwH0Cai/gsArknFL3nJiZtbnW0AlkA75mVL3QPAm0qpXYF1WgDoDODxBM33AvBSxHbrALgduleTjJ3ni8gW6F7PoQAeDlSZKiJrReR1ETk0HbtEpD50D+sTa/En0L/yYRwUUndvEWmYYPtZxxG/hh2/qGOdDDn3q4gcBqAKgK/StDkl8uXXJLa9R/WAvK+I1A1pc28ABwBYlKZdqVyDvrpKqWLou5M9zgMRqQ7g6AR27UFegrhS6goAtQEcD+C/AHZY6lMR7qiBAGYrpZZFtSsirQFUUkotjagyHMAEpdR3Sdo5TSlVB9rhD0HfQpUwAPr2rAV0j+M1EakXYVcNaOe8FaIuyQVutpZthj4+YdQKqYuY+jnDEb+GHb9adl48WfLhV/ODNRk6VWDXzxp59Guibdu8CuAvItJIRJpA3yEBQI3ANisDmApgklJqSdR2Eb1fQGrXYLBuSf2wug9BB/zXYuzag7yNTlFK7VJKvQOdmxwCACJSAcBJ0A4JMhDApATN9gLwSpjC9F66AxiXhq1fQv86Pmgtm6OU2q6U2qaUugvAJugTLYxu0LdUYSdgkflfx1pWBzpnF0ZRSF3E1M8pDvg17PgVKXMvmyI59avpqb0Inf65Kw170ybXfk207RDuBPAxgAXQKbPnAPwMq+Nl7J0MYCeAK6O2ZzpjbUw7YaRyDQbrltT31RWR0QDaQ6eLUjoXy8IQw0rQD4cA3atZoZRaa1cQkY4AmgL4d4K2eiH617MrdM95pYisAnAtgL4iMj8NO8NQ8N/OJWWXUmoj9G2inY45FNG3VItC6q5WSq2PsS0flFW/hh2/lG5fk7Er0341ox+eA/Ad9MPZfJErvybatg/TobpSKdVMKbUfgPUAPlJK/WpsEgATAOwNnQv/OWY7PQDMCKaILFK5Bn11RaSm2YdF1rLboAcjnKyU2hJjVzipJNBL+wegMfQDqFrQT9l7ACgGcLrR3wbg7yHr/QvA4wnargHtuGox+ibW3xjok6xRRP2LATQ2cjtz0MeacnMAHaHzktUAXAdgLYCGEW0tB9A8xva7AcyCfkjUBvrijxrF0BP6KX07APWgR83Yo1MqG5umAbjDyHs8dCrHfr0cwOfQI1OaGr/ao1NKfDoHwCVGrpBPvxqfvggdxCtl05dlyK+x2w6pX+JPAXAsgG/hf6j8EPSIlYQjeqDvIAbG6GOvwUDdRtDpk77mXBoJ/+iUmwB8CaBJ2n7K1Qlh7dAs6NTDFgCfAbjE0n8I4KjAOtVM/W4J2u4NYHoKtgyDNYoBOhVSZJUfg74VKzYX6+iSEw76ocSnRrcewJtBu6122gNYmMCWqgAeNcdkNfxDGZtD35I1t5YNNfW2GDurWrqJ0HcF9t8g+tUrC4BRADaYv1GwhsBB57eDx69rPv0KoIuxY5tZp+Tv+EL1axLb9h0/6Ieoy80xWgpggFW3hTl+PwWO34CQ7Qp0gG6cwP64a3BRYPvdoR/MbjfnV0tLp6Dz/LZdN6fipzLzFUPzxPhjAM1UGkaJyIPQF9WDCSvnEBG5HsBeSqnr821LPqBfC5MC9usxAB5QSh2Tb1uSpVLiKjmjLvT4yHR/VRZA33KWNZajbNqVK+jXwqRQ/QroF4ecocz0xAkhhKROWRidQgghJE0YxAkhxGFymhMXEeZu8ohSKuW3EpOBfs0v9Gthkqxf2RMnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHKUsTJWeUwYMH+8rjx4/35O3bt/t006ZN8+QJEyb4dO+++24WrCOE2FxwwQW+cp8+fTz5rLPO8ul+/fVXT16xYoVPd//994e2P3/+fF951qxZadlZFmFPnBBCHIZBnBBCHIZBnBBCHEaUyt1cqLmceHXAgAG+8rhx42w7fLoGDRp48s6dO326119/3ZPPOeccT/7pp58yYmcuKcQJdVu1auXJXbt29emOOeaYyPUOOuggT160aJEnB3OqixcvLqWF2acQ/PrUU0/5yn379rXt8OnSiVnFxcW+8jXXXOPJzz77rE+3fv36lNvPBpwomRBCygEM4oQQ4jAFm06Jo0qVKr7ypZde6smnn366T9etWzdPtlMr/fr189UrKirKpIlZwdXb7hNPPNGT77jjDp/uwAMP9OT69euXelvB4afDhw/35LFjx/p0wdRbvnDVrzYjR470le10RybSKXFtdOzY0aebN29eyu1nA6ZTCCGkHMAgTgghDlMu0ylx2CNVAOA///mPJ3fp0sWTL7zwQl+9qVOnZtewDODqbXfPnj09+R//+EdkvaAPtm7d6snB0Q8bN2705LZt23rysGHDfPV69+7tydddd51PN2bMmBirc4erfrWpUaOGr9yrVy9P7ty5s0932mmnRbZTqdLul9D32WcfT45Lpzz88MM+3R//+MckLM4+TKcQQkg5gEGcEEIchkGcEEIchjnxFLC/nma/5QcABx98cK7NSZlCyJ1mm5o1a/rKc+fO9eQnnnjCp7v77rtzYlMi6Nfd/OY3v/HkZcuWeXJcTvzmm2/26UaNGpUl61KDOXFCCCkHMIgTQojDMJ2SAqtWrfLkOnXq+HRXXHGFJ1999dU+nf3h+uAbobmEt92p8+CDD3ryCSec4NPZQxPzCf26Gzudsnz5ck+uUMHfX7VTo8GJXzp16pQd41KE6RRCCCkHMIgTQojDMIgTQojDFOxEydnAzm0fddRRPp39hbu6dev6dHb+jbhLtWrV8m0CSQH7eV/wGrR1CxYsyJlN2YA9cUIIcRgGcUIIcRimU1Lg6KOP9uTg0MxgCsXmww8/zJpNJLvYc3EGh6nZb3cG53Ak+aFFixYprzN58uQsWJI72BMnhBCHYRAnhBCHYRAnhBCHYU48B2zevDnfJpAAtWvX9uQjjjjCk4OvXLdp08aTGzVq5NMtXbrUk0ePHu3T3XfffRmxk8RTtWpVX/n666/PkyX5gz1xQghxGAZxQghxmIJNpxxwwAGR5ZUrV/p0ffr08eRu3bqVetv2l+8A4Pbbby91myQce2LcgQMH+nRnnnmmJ//2t7/16ey3L1u2bJnWtps2berJp556qk/HdErmsCcoB/wTJduTIQP+CZaTJfhl0Xnz5qXcRj5hT5wQQhyGQZwQQhymYCeFGDx4sK88fvx4T053n+15+oJt2E/Fx4wZk1b72aYQJg8Ipsn+97//ebI9IUCQNWvW+MrBlFoJ1atX95XtNzaXLFni091zzz2eHJx/c9u2bZG2ZJpC8Gsczz33nK9sp1OSJW5SiDief/55X9lOk82aNStlO1KBk0IQQkg5gEGcEEIchkGcEEIcpmBz4vYXBwGgb9++nhzcZzvP+sUXX/h09lC0v/zlL54c/Gpdhw4dPHnx4sVpWJx9CiF32qxZM185OMQsimRz4u3atfOVFy5c6Mk333yzT3f33Xcnte1sUwh+jWPXrl2+cjoxy36elW4bgP+6P+ecczz51VdfTau9OJgTJ4SQcgCDOCGEOEzBvrH5wQcfxJaTZdiwYaHLg0PIymoKpdD4/vvvY8ul5YYbbshoe6T02HPbAkDz5s3zZAlQq1YtT+7atasnZyOdkizsiRNCiMMwiBNCiMMwiBNCiMMUbE48XYIfme/du3dovalTp+bCHJJjzjvvPF/ZHor4zDPP5NocAqBnz56+8iWXXOLJV199dVJtbN261VfeuHFjZN0XXnghUjd79mxPfumll5LadrZhT5wQQhyGQZwQQhyG6ZQArVq18pUPP/zw0Ho7duzIhTkkS9hpswceeMCT7UkmAODiiy/25K+//jr7hpE9CL5F/f7776fcxhlnnOErZ/sLhLmEPXFCCHEYBnFCCHEYBnFCCHEY5sQTYH/9zJYnTpyYB2tIprAnx7Vngfr222999ebPn58zm0hydO7c2ZODXyeMol69etkyJ++wJ04IIQ7DIE4IIQ7DdEoCoj4ef/DBB/vKS5cuzYU5JE2uvPJKX3nkyJGh9YITbG/YsCFrNpHksN/QBIBLL73Uk5Od3CE44XEhwZ44IYQ4DIM4IYQ4DNMpaVK3bt18m0AS0KNHD0++8847fboffvjBk2+88UZPnjFjRvYNIykxffp0X/n222/35EaNGuXanDIHe+KEEOIwDOKEEOIwDOKEEOIwkuwQnYxsTCR3G0uTihUr+srjxo3zZHuYWnCi5CVLlnhyly5dfLri4uJMmpg2SqnkXm9LkbLiV3sSWwB4++23PXnXrl0+XZ8+fTw5+JamaxS6X4PYEyc3a9Ysst6kSZM8OTh01AWS9St74oQQ4jAM4oQQ4jAcYhggeNttD02z0ynVq1f31bM/lLRz584sWUfiCM6BaU/iMGrUKJ/O9RRKecZ++/KKK67w6TZt2uTJ//znP3NmUz5hT5wQQhyGQZwQQhyGQZwQQhyGQwzLEYU4FO3aa6/15NWrV/t0kydPzrU5eaEQ/Uo4xJAQQsoFDOKEEOIwTKeUI3jbXZjQr4UJ0ymEEFIOYBAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHyekQQ0IIIZmFPXFCCHEYBnFCCHEYBnFCCHEYBnFCCHGYnAdxEZkiIj+KyBYR+UJELg6pc5OIjBCRASJSZP1tExElIkfGtF9FRNaJSK0QXcJtW3UfCmx7h4hstfQNRORZESkWkRUicn4S+/6aiJwcslxEZKSIrDd/I0Uk8rsJInK+2WaxiDwnIg3M8qoiMsHotorIAhE5JZFdmcAhv14kIh+Zut+JyCgRqWTpy5xfA3X2F5GfRGRKIrsygSt+NfWvFpFVpv6jIlLV0h0nIu+b6+JTEemUxL5n3a8i8pbxZ8kxW5rIrj1QSuX0D8BBAKoauQ2AVQCODNR5B0CnkHUHAfgaZlRNRPvdAbyR7rZj2p0I4FGr/ASApwDUAtAJwGYAB8WsXxPA+pLtB3SXAVgKYF8AzQAsBnB5zD5sBdDZbHsagCetbQwD0BL6B7q3qduSfvXqDgFwPIAq5lh/BODGsuzXQL3XAcwGMCXbPnXMrz0ArDbr1AfwFoC7ja6B8VE/ABUBXABgI4D6+farsfPiUvkoFydCzIE6EMCPAPpby+oDWAOgYkj9mQBuTdDmWABD09l2AoduBdDFKu8EcIBVZ3LJSRPRxukAXojQzQVwqVUeDOC9iLojAEyzyq2NLbUj6n8KoC/9Gll/KIAXXfArgHMBPA39Q52TIO6KX01wHGGVuwFYZeTeABYF6n8BYHC+/YoMBPG85MRF5EER2QZgCbRjXrbUPQC8qZTaFVinBfSv2eMJmu8F4KU0tx1FXwBrAbxtygcA+EUp9YVV5xPoX9107DrIrJ9MW766SqmvYQJPsKKI7G2WL4qxK2M46FeYbZccnzLrVxGpA+B26B+dnOKIX8OO9d4i0rCkqWDTANqnaVemr9e7TEppjoh0jbEplLwEcaXUFQBqQ9/W/hfADkt9KsIdNRDAbKXUsqh2RaQ1gEpKqci8UoJtR3ERgMeV+emEvi3aEqiz2bQbRS9En4C1zPp2W7Ui8mzBuqHbFpHKAKYCmKSUWhJjV8Zwza8i8gcARwEYYxaVZb8OBzBBKfVdjC1ZwRG/hh1rmHXfBdBURM4TkcoichF0j7hG1HaRO7/eAGA/6LTMvwC8aI5L0uRtdIpSapdS6h3ovNIQABCRCgBOAvBqyCoDAUxK0GwvAK+ks+0oRKQ5gK7w9yiKANQJVK0DnXIJa+NgAJuVUt9GbCbYXh0ARdaPRlzdPbZtjuNk6F/8KyO2mRUc8uuZAO4CcIpSap1ZXCb9KiKHQeeOx0VsJ+s44NewYw0AW5VS6wGcAX0XsxpATwBvAAj9Qczl9aqUmqeU2qqU2qGUmgRgDvRxSZqyMMSwEvSvIgAcDWCFUmqtXUFEOgJoCuDfCdqK+/VMtO0oLgQwRyn1jbXsCwCVRGR/a9mhiE5bJLJrkVk/mbZ8dUVkPwBVjU0wvYEJAPaGzoX/HLPdbFJm/SoiPQE8AuA0pdRnlqqs+rUr9MPqlSKyCsC1APqKyPyYbWeLsurXsGO92gRwKKVmKaWOVko1gL6m2wB4P027Mna9hqCwZ+onntIk1FP9A9AY+uFMLeinxD0AFAM43ehvA/D3kPX+BZ3OiGu7BvTT5GrpbDum3aUA/hCy/EnokQw1AXREzCgGALMAdI7ZxuUAPoe+pWpqHB/3tHsL9O1lTQBT4H/a/RCA9wDUol9D659o2gv1R1n0qzkGTay/MdABshH96tXvCT16pR2AegBmwHogDeBwAJWhe8H3QnfMomzLlV/rmf2qBv0DNcDs4wFR2w7dRjZPgpAdamQO0CazY58BuMTSfwjgqMA61Uz9bgna7g1geim23Rz61qe5tex35qDuMfIDetjSc0a/EsD5EdutB/1QtFKMbQJgFIAN5m8UrGFZxq7jrfL5ZpvFAJ4H0MAsbwH9S/6TWafkbwD9qv0KPWLil8DxeaUs+zWk3WHIwegUl/xqlpWkS7YAeAzW8EDoH+bN5u8pAI3z7Vezjx9Ap1Y2QXe+TkrVT2XmK4ZmJMXHAJqpNIwSkQcBLFRKPZhx40qBiPQHcLZSqn++bckH9GthQr+WHSolrpIz6gK4Jp0TwrAAwIsZtCdTbEIeH0iVAejXwoR+LSOUmZ44IYSQ1CkLo1MIIYSkCYM4IYQ4TE5z4iLC3E0eUUqlNv40SejX/EK/FibJ+pU9cUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcZiyNFEyIYTsQe3atX3lCy64IKn1zjnnHE/u0qWLT3f77bd78sqVK326CRMmpGpiXmFPnBBCHIZBnBBCHIZBnBBCHEaUyt1cqOV14tUaNWp48t/+9jef7qabbvLkv/71r548YsSIjNtR3ibUvfTSSz15+PDhPt3y5cs9uUOHDrkyKSsUol87d+7syf/3f//n0x144IEptyfiP0R23Nu1a5dP9/nnn0e286c//cmTZ8+enbIdqcCJkgkhpBzAIE4IIQ7DIYYA6tev78kVK1b06erWrevJffv2jWyjatWqnnzeeef5dFWqVPHkVq1a+XT2bd2wYcM8ubi42Ffvvvvui9w20VSvXt1Xvuiiizy5YcOGPp1dbty4sSevWbMmS9aRVPj66689ed26dT5dkyZNItf7/vvvPdlOScalU4Lnzf333+/J1apV8+kaNWoUZ3ZeYE+cEEIchkGcEEIcptyMTjn++OM9+ZprrvHpTjjhBE+uVatWUu3F3Z6lgt2O3cbzzz/vq9enT5+02rcpxFEMdips+vTpPl2yo06++uorTw6OhJgyZYonr1+/PrINO50G+N8QtNf76KOPkrIpFQrRr/nkxhtv9OQ77rjDp7Pf7txvv/2yagdHpxBCSDmAQZwQQhyGQZwQQhymYHPiQ4YM8ZXHjRvnyfaQPyC9fHa2c+I7d+701WvWrJknb9iwIa1tFWLudOLEiZ6c7NftgkT5AACWLVvmyUVFRZFtVK5c2Vdu06aNJ//vf//z5FNOOSUtG+MoRL/mkjp16vjKts/tIcYAc+KEEEIyDIM4IYQ4TEG9sWkPI7TTJ8Cet7tlnXnz5vnKW7duzZMlZYsrrrjCV77wwgs9OZgKWbFihSeffvrpPl3Lli09+YUXXojcXvAN2ygylV4juSf4Nm8whWITHIJaFmBPnBBCHIZBnBBCHIZBnBBCHMb5nLid677zzjs9OTiM0CaYv4zDnjxg5syZnvzZZ5/56t16662eHJdTi7PF/nLbwIEDffV+/vnnpNssZIJfkatQYXc/xP6CHQB069bNk20/AsCiRYs82f5yZa9evXz12rVrF2nLLbfc4snBYWq//vqrJ6dyvpHcYD8TCX7iIg77vCkrsCdOCCEOwyBOCCEO43w65eijj/bkjh07enIqQ7zsNyDPPfdcn27+/Pmh9S6//HJfPft2Ot3hZfakEPabYeWR2rVre7Kdqgoed/vN1uDEGcEUSjK8/PLLkeVOnTr5dHYaxk6fAH7/jR49OmU7SHY566yzPDkuZRZM0f3www9Zsyld2BMnhBCHYRAnhBCHYRAnhBCHcT4nvnDhQk9etWqVJ8dNphrEzoO/8cYbkfVatGjhyfbsH6Xhtdde8+RUhjoVOrZPrrrqqsh6H3zwgSdnI/dsv5JtP7MA/JPoBr86OXz4cE9+8803M24XSYz95c8zzzzTp7vtttuSauOll17ylRcsWFB6wzIMe+KEEOIwDOKEEOIwzqdTtmzZ4sk9evTwZPttOgBo3769J1988cU+3fvvv5/UtuzJips3b+7TpTuscPz48Z4cN+lAeaNv376hyxcvXuwrB79OmGnsryR27do1st69997rKz/66KPZMolY2EOMAWDQoEGebA8Jta9/IPnr9a677krfuBzBnjghhDgMgzghhDhMwc6xmSm6d+/uyc8884wnBz9ylexxHDt2rK983XXXlcK61HBpLsb69et78nHHHefJs2bN8tXLdArqoosu8pXtSQCCH1WzdcHRSsXFxRm1Kw6X/Josd999tydn4hqxP5QG7PmGbRTB0SnZTt/ZcI5NQggpBzCIE0KIwzCIE0KIwzAnHqBt27a+8sSJEz3ZHs6UysS4n3zyiSf37NnTp1u9enU6ZqZFIeZOM8Hvf/97T7aHfAaxv2gJ+IccBnPgTZs29WT7K4yXXXZZumZGUoh+ffrppz05OLSzQYMGKbcXd70uXbrUp1u7dq0nB98WzuUbm8yJE0JIOYBBnBBCHMb5NzYzgT38aMyYMT7dUUcd5clxKZM4nT38LJfpExKNPZTQTqEE/WjPq2qnRYD4YYT2RAPBt3tJYvr37+/JXbp08en22WcfT37kkUd8uurVqyfVvp0WCb4dvGLFiqTtLAuwJ04IIQ7DIE4IIQ7DIE4IIQ7DnDiAa6+91pODQwDTwX49H/DnVUl+sD+fAPhfmbcJ+sqenGL9+vWR7dufCQD8Q1M/++yzZM0kIQQ/tWAPOQwOHYzi448/9pVPPfVUT3b9ORV74oQQ4jAM4oQQ4jDlMp3Sr18/X/mOO+4odZvffPONJw8cONCnC86/SHLPDTfc4CvbXyS00yT20DYA2LhxY1LtV61a1Ve253hlOqV0BIcNDhkyxJPteU7jOOmkk3zlZP3qAuyJE0KIwzCIE0KIwzCIE0KIw5TLnPhTTz3lK6fzJcfgsCT71V3mwMsGLVu29OTg1yltHnjgAU9ON1cafAX/888/T6sdorHz4IcddphPFzWJNuD/0uSwYcM8uZBy4EHYEyeEEIdhECeEEIcp2HRKjRo1fOVJkyZ5crJvecUxevRoX/nTTz8tdZukdFSuXNlXfuyxxzzZ/vIdAGzbts2Tb7/99lJve+vWrb7yfffd58lnn312qdsvb9x7772ePHjw4KTXu/rqqz15zpw5GbWprMKeOCGEOAyDOCGEOEzBplP69OkTWQ6ORkl2dMrUqVM9eezYsaWwjmQKO4Vyxhln+HTHH3+8Jwd9nIkUShz/+c9/PLlhw4ZZ3VYhcvLJJydVL/gm7rx587JhTpmGPXFCCHEYBnFCCHEYBnFCCHEYSedtxbQ3JpKzja1Zs8ZXtvOSwSGGccdg7ty5nmznXDds2FBaE3OOUqr0YytDyKVfg3To0MGT44aUvfnmm77yaaed5smuv2FbCH694IILfOWHH37Yk4NfiHzooYc8+aqrrvLpfvnllyxYlx+S9St74oQQ4jAM4oQQ4jAFO8Rw8+bNvnKyw7yCb97dfPPNnuxiCqXQeeGFF5KqN2PGDF/Z9RRKobFo0SJf2X6jNvhxsQkTJnhyIaVP0oU9cUIIcRgGcUIIcRgGcUIIcZiCHWJ46KGH+sr/+Mc/PNl+HRvwDzG87LLLfLrx48dnwbr8UAhD0YLYr1kfeeSRPt15553nyc8++6xPV0i51EL0K+EQQ0IIKRcwiBNCiMMUbDqF7AlvuwsT+rUwYTqFEELKAQzihBDiMAzihBDiMAzihBDiMAzihBDiMAzihBDiMDkdYkgIISSzsCdOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEOwyBOCCEO8//cRlr0YLeydQAAAABJRU5ErkJggg==\n", "text/plain": [ "

" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "interp.plot_top_losses(9, figsize=(6,6))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "interp.plot_confusion_matrix()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To simply predict the result of a new image (of type [`Image`](/vision.image.html#Image), so opened with [`open_image`](/vision.image.html#open_image) for instance), just use `learn.predict`. It returns the class, its index and the probabilities of each class." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(Category 7, tensor(1), tensor([0.1482, 0.8518]))" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "img = learn.data.train_ds[0][0]\n", "learn.predict(img)" ] } ], "metadata": { "jekyll": { "keywords": "fastai", "summary": "Application to Computer Vision", "title": "vision" }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 2 }