{ "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 [`ImageDataBunch`](/vision.data.html#ImageDataBunch) 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 *" ] }, { "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 = cnn_learner(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", "
epochtrain_lossvalid_lossaccuracy
10.1404440.0976850.968597
\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`](/vision.data.html#vision.data)." ] }, { "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+vtr4ff8G5v/BaH4o/D/Q/ih4L/AGH9Tn0bxHDHNpM114t0W1mkikyUkeCe9SaFGA3BpEUbSrZwwJ+Ja/fD/g13+Dtzq/w6l/b6/ae/4Kna9o+gaP4jTSNL+GUnxZezs3a32LGNVWeYfuzJND5VsuFdSu8usnl0AfjV+2R+wp+1l/wT9+J8Pwc/a/8Ag1feDPEFzp6X1nbXF5bXcN1buSBJFcWsssEoBBVtjkqwKtg8V5JX6a/8HYmq/tMt/wAFVb7w5+0L8RtB1nT7bwta3XgDTPDaSxwaPo000yxwTRykkXbNC0krbmDl1ZdqFY0/MqgAr9b/APgkv+xl8Hf+Cb/7Jeuf8Fwv+CjHw1g1KbRV8v4BfC3Xo2t7nV9XWVEj1FoZk5VZGTy5MOI1WSbaWWGvyQr2f9rD/goV+2T+3DpPhHw/+1H8cb7xTp3gPR10zwlpp0+0s7bT7dVVRiK0iiR5CqqpmcNIyqoLEAAAGX+2p+2F8Zf29f2mPFP7Vfx71G1uPEvim8WS4jsbcRW9rDGixQW0S8kRxRIkalizEICzMSSfLKKKAP/Z\n", "image/png": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABHNCSVQICAgIfAhkiAAAAbBJREFUSInt1rGKwkAQBuBfuUJMRK0FQbYxoGBpLQimDAg+goVPIFrY29iYykoQfAEraxFDhBRW2lmJVqaV7Fxl0BPNrp42dwtTJOzOl1lmk4QAED44wp/E/sE/AubzebRaLXDOwTkHEWGxWMCyLP8e5xyNRkMYpUfRbrfJ87zAOB6PVKvVHuYCQF9BT2PbNvr9vn9dKpWgadrNPFVVwRh7vcKfwRijYrFI1Wr1qsL5fE6pVEokhxwIgDRNo9VqdQUWCgXR9eJQLBYj0zRpu9360G63o2w2S5FI5PfBwWBw0yyu61K32xXdTnGw0+nQ6XS626Wz2Uwoj/DBVxQF4fD96fF4XChP4LE4j2aziWQy6Sfu9XrI5XIwTRMAYFmWaCr5LgVAiqKQbdvv7dJzZDKZK8xxHEqn0+8BE4kELZdLH1uv18QYk8khB14eDcdxZDE50DAMOhwO5HkebTYbmW2UB3VdJ9d1/eoMw3iq2YRAVVVpNBr52GQyoWg0+h5Q13Uaj8c+NhwOqVKpPIsFg5cf4P1+T+Vy+RVM/NUGAPV6HdPpVGbJzQidy/zU+Phf2zcGKKJjocPzywAAAABJRU5ErkJggg==\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": { "needs_background": "light" }, "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/9oADAMBAAIRAxEAPwD8BL29vNSvJtR1G7luLi4laSeeeQu8jscszMeSSSSSeSTX15+zX/wQr/4KM/tS/sq63+2Z4A+EdvYeBdIsZLy0vfEGorZzavBEheWW1hYb5I1Vf9YQqsSAhbDbfJf2Avj/APBH9l39qHw/8dvj58B7X4kaL4d826tvCmobGtbm9CHyGmjkBSWNXwxRgQcDp1H9FP8AwSB/4KA/FP8A4KRfsSfHf9pv9vr4kaF4K+Fk1nc+GLLRNCsVtYdGsVtpWu7pZBuaWRkn252ZzEdq4woAP5cHVkYowwQcEUlfbP8AwXh/4J1/CH/gnN+1/pngb9nvxDqGoeBfF/gyx8ReHH1e8SW6SOYMrByArYLJuG5VPzEAYAr4moAK9A+CnxF+JX9taJ8GbD4h6zbeF9Z8U2L6j4fj1eWOxuJPPRQ8kQJRiOOSp6Dg4Fef1sfD7xz4g+GPjrR/iL4Umjj1PQ9ShvrB5Yw6CWJw67lPUZHIoA/Sj/g7R1C8uP8Agp3p2lSa0Li2034Y6NbWtsFdRajY7soDgHBL7geSQ3tivy/r2D9sT9sD45/8FAvjdrn7T/7SXiG1v/E9/Fa2x/s3TorS2gt4omSKGOKMYCqqDkksSSWJJzXj9AH/2Q==\n", "image/png": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABHNCSVQICAgIfAhkiAAAAv5JREFUSInVlr1LK1sUxX9nzGSiMXFInAgJYmGVImAjNhFEESysbMTWUksrQeH9ASKCvYW1Fn6gqWxsLRSLIEEQMYpfmARJMklm9m3eC+9dfObDe4W7YWBmz+y9Zi3WOWczPT0twLdd6u+bbwvtO8H+HEDLstoG7AD+avbjaDTKxsYGIyMjDAwM8P7+zuvra8ugTblrdnZWnp6exHEcKZfLkslkZH5+XgzDaMmlnkZ/4/F4WFpaYnFxkXA4jIig6zqhUIhwONwyu08BJyYmWFtbwzRNotEoAEopRITOzk7u7+/RtNZt8CH11dVVcRxHHMeRUqkkjuPIycmJZLNZcRxH8vm8zMzMiN/vF6VU+5J6vV6SySRTU1MAnJ2dUSwWSaVSpNNpVlZW6Ovro1KpkEgk8Hg8uK7Lzs5OU+w+lNSyLILBIPv7+xwfH3N0dIRt24RCIXw+H0opAoEACwsLGIZBNpulWq2yt7fXnqTxeFzm5uZkfHy8nrMsSzY3N+Xt7U1qtVpdbsdxJJfLydbWlgSDwfZcmk6nubm5oVQq1XNKKeLxOIFAAKVUPV8oFAgGg/T09GCaJoVC4VN2/2uxf4MBxGKx/+wwt7e3LC8vk0qlAEgmkyQSCXRdbw/w54hEIti2DUAmk+H09JTd3V1KpRK2bfPy8sLd3R3VavXTPg0X/j9xeXnJwcEBV1dXpNNptre3MQyDoaEhdF2nUqngOE5TvZpeQ7qui2VZ9efh4WG5uLiQYrEoh4eHYppmwx4tbRPVapXn52cANE2jVqthWRZKKc7PzxvKCV84D13Xpb+/n3w+j+u6aJqGSOPhoW1ApRSPj490dHTg9Xrx+/24rvv7AEWEwcFBYrEYruvS29vb1MHctEt/DqUUruvy8PCA3+/n+vqaSqXSsK5thpqmUSgU6OrqwjRNyuXy7wWMRCKMjo7i8XiwbZtisUgul2tY9yVJbdumu7sbwzDIZDJNuRS+MEVPTk7K+vq6jI2NtVL3a0d5y7LE6/WKz+f78P0PYSDjwf35LC8AAAAASUVORK5CYII=\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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14xtPXDQoEEuV976YKwZ25pFbLew7VO2fiziT/2xp0khM2wrWawF/vzzzxrHk712796tcVl/E4cPH3bXtlYV2+1iOxwq74svvnDXL7/8ssb2ORfxfwszZ850Ofs8T5gwweXsd0XsSUGomObNm7trO8L0wQcfdLn4vYvyKuv7PfYZzYZxprwZAwCQGIsxAACJ5dQ2tT3YWkTklltu0ThOdamosqY02a/u2xNDRHz7FNvUlRdbHG6++WaNb731Vpez7Wg9evRwOXsiTGQngMVpQrNmzdJ41apVLrdnz55SfyYqJk6wmzZtmsZ2epOILynEKW7jx48vNWf/pmbPnl3xm4WIiFxxxRXu+s4779T40ksvzcjvsC1uo0aNcjnbIvXoo4+63MKFCzPy+zOJN2MAABJjMQYAIDEWYwAAEsupmnFsMbF1poMHD7qcvY65xYsXa7x//36X69y5s8bXXHONy9mv2f/www8uV9ZJMigfW/e3p/aI+Na1eIqP/buItWbbwmJboERE9u7dq7GtNYqIrFixQuPt27ef8N6RWfbULBuL+FO6HnjgAZez7TW23igisnnzZo3ts4yKsd+rEBG54IILNI7PWv369TW27YYiIj/++KPGsQ4d29osO/LSPstVFX9xAAAkxmIMAEBiObV3umzZMnc9btw4je+//36Xs1tbsdXITsuyU7VERLp06VLq77fbXkuWLHE5DpyvPNseVlhY6HIFBQUalzU1LbJtMAsWLHC5Z555RuOSkhKXi9dIJ5aA7N/GPffc43K2lS1uXb7yyisab9myJZO3WC3FSXRvv/32cWMRXxaIz+uAAQM0Hj58uMvZZz2WG1999VWNt27dWq57Tok3YwAAEmMxBgAgMRZjAAASy6masf0qu4ivIa9evbrU/2zNmjVdLj8/X+OOHTu6XNu2bTWONRH7lfw4ai8bTg2p6r7++muNV65c6XJNmjTRuFmzZqX+jPi52BN+mjZt6nL258RWDFQdrVq1cteDBw/W2H6XQMTXFadOnepydqzmgQMHMniHiOxzJyLSu3dvje+9916Xs22LDRs2dDlb91+6dKnLLVq0SONs+Dx5MwYAIDEWYwAAEsupberITlcq67DwuPVx1113aWxPGhHxU2Ts4dUi/qSX7777zuXiFjpOni0LPPfccy73/fffaxzbz2rVqqXxsGHDXM62UcSJao899pjG991338nfME6ZevXqaRynMvXq1Uvj2Pa0fPlyjadMmeJy9mSuWM5AZsWt6Iceekjj2E5qS3yxZdSWGt577z2Xy7bT03gzBgAgMRZjAAASYzEGACCxnK4Zl8XWCocOHepydoReXl6ey9mToGyrjYg/pSTWjOOJUqiceFJSUVGRxrFtwtb9GzVq5HI33HCDxsXFxS63adMmje3njtMv1n5ti+GNN97oci1bttQ4nrpmR57GVhie0cqzbaLxuzgDBw7UeOzYsS5nR93GMaUTJ07UOLaj2e+KxNO7sg1vxgAAJMZiDABAYtV2m/rKK6/UuF+/fi5nJzHFKVv2oOvXXnvN5ezEl9j2hMyqW7euu7aHxseyg52i1qZNm1J/pj2tS0Tk448/rswtIoNieeGmm27SeMSIES5nW9lsu5IIU7YyzZ62JCLSqVMnjUeNGuVyo0eP1th+RiK+9fTZZ591uenTp2scJ+HlUgsab8YAACTGYgwAQGIsxgAAJFZtasax5tS1a1eN4zg9+/X8WKN48cUXNf78889drqSkpNL3iaPq1Knjrlu3bq3xmDFjXM6e1GNHloqIHD58WONYy7ftLePHj3e5jRs3nuQdI5PscxhP4urWrZvGsf5o29DWrFnjcvH0Npw8exJW9+7dXc62mfXp08flbOvY2rVrXW7+/PkaT5o0yeXsM5tLNeKIN2MAABJjMQYAILGc3qa27S9xO8W2M8VD5e3X9efMmeNydrLWvn37MnKf1Vnjxo3dtT3dauTIkS731FNPaWwn9kTr1q1z1/aklzg17auvvtJ4x44d5bhjnCoNGjRw13bKlj1gXsSXluLkrC+//FLjzz77zOXsCUComL59+2r8yCOPuFx+fr7GsS3UlvXeeustl7PPaHU94Y43YwAAEmMxBgAgMRZjAAASy+macfPmzTUeMGCAy9nTeuIpP7t27dI41hjteD3bMoOK6d+/v7u2I/M6dOjgcra+HE92mTx5ssaxNWLDhg0axxGIsa6FdOzzKuJP+YkjTlu0aKFx/O6GrU0uXrzY5fi8T5494U7Ej66M4zBtO9qbb77pcu+++67G8VS7Q4cOVfo+sx1vxgAAJMZiDABAYjm1TR23m/Py8jTu3Lmzy9mpPXFylt2a3rx5s8vF7VFUTpyeVFhYqPHBgwdd7qOPPtJ42bJlLldUVKRxth8yXl3FNjf7zNqTt0T8dvOePXtczrar2VPWRCgtVUR8nt54443jxqgc3owBAEiMxRgAgMRYjAEASCzra8Z2LOJ1113ncrfffrvGPXv2LPVnLFq0yF3PmjVL461bt7ocNafMsu0OIiJTp07VOLaj2Vrg7t27T+2N4bSrXbu2u7bjbON3C4qLizWeOHGiy9mTmWwbDlCV8WYMAEBiLMYAACSW9dvU9erV09ie5CLi22TiNpc9GWTlypUuZ6f2bNu2LSP3iaNsC4s9CF5EZP/+/RpPmzbttN0T0ot/C7atcN68eaXm5s6d63K2VTGXD6M/XWJbqD1Bq127di5n/72cMmWKy23ZskVjTs86Fm/GAAAkxmIMAEBiLMYAACSW9TVjO6otjsOM4/WsmTNnarxgwQKX2759u8bUnDLPns4zZ84cl1uxYoXGgwcPdjnaynLbqlWr3PWmTZs0jiMZ4whMnDrNmjVz1/369dP4+uuvdzlbr2/btq3LPf/88xrHMaW0oPFmDABAcizGAAAklvXb1HYSz/z5813OtkrEQ8Xt1K01a9a4HAddn1r2YPHYsjJs2DCNbWuayLGfL3JLPBGNE9Kqhp07d7rrJUuWaGxPxhMRKSgo0Lhv374uZ8sOM2bMcLn169drHFvcqgvejAEASIzFGACAxFiMAQBIrAatOwAApMWbMQAAibEYAwCQGIsxAACJsRgDAJAYizEAAImxGAMAkBiLMQAAibEYAwCQGIsxAACJsRgDAJAYizEAAImxGAMAkBiLMQAAibEYAwCQGIsxAACJsRgDAJAYizEAAImxGAMAkBiLMQAAibEYAwCQGIsxAACJsRgDAJAYizEAAIn9D1tY+7mIUr8uAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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 [`cnn_learner`](/vision.learner.html#cnn_learner), and call [`fit`](/basic_train.html#fit):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Total time: 00:08

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_lossaccuracy
10.1947790.1317090.950932
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "learn = cnn_learner(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": "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fiM0lzicQkRUCTCIExE5jEGciMhhleZXDLPNHgN9++23U35ecOoTpW/69Omxy5nWvHlzL33eeef58oYPH+6l7fHyBQsW+MrZNwWhzLLHtrt27erLu//++710cNqvPTXRBTwTJyJyGIM4EZHDOJySIf379/fSwelsNvsmEwDw008/Za1NVHb2EAngHxY54ogjIss2bNjQl1daWuql77jjDi89fvx4X7n//ve/6TeWYh111FFeOjgFNDiEYvv888+z1qZs4Jk4EZHDGMSJiBzGIE5E5DCOiZdBs2bNvHS/fv18ebfddltKddh3mwH8X7um/AveAahTp06RZe07CQV/gfC9997z0sFphVSxBe++VNHxTJyIyGEM4kREDuNwSoA9LQkAhgwZ4qXtX8k7/PDDfeVS/fW7u+66K/3GUcbYN5AYNWqUlw7e8Pjaa6/10sEhE/uGEVQ+9i89BpftG6cA/l+n7NmzZ7nXPXbsWN+yfaMOF/BMnIjIYQziREQOqzTDKfYl8/XXX1/u+qpU8b//pfqjOY8++qhvOZ8/Ol+Z9O7d27dsf3PSniHUt29fX7k1a9Zkt2EEADjxxBN9y0899ZSXTvfGNcEbcNhuuOEGL33vvfemVX9FwTNxIiKHMYgTETmMQZyIyGGVZkzcvhlucJyzcePGZa4vOAZuj9t99913vryff/7ZS996661lXheV34033uhbrlGjhpfu06ePl163bl3O2kS7zZ4927c8evRoLx0cE7enHwa/DVurVi0vfc0113hp+1clAeDdd99Nv7EVDM/EiYgcxiBOROSwSjOcMmDAAC/dvXt3X97+++/vpZ988klfXu3atVOq356mdu655/ry7Hv9UX4Eb9pgs7+9+cQTT+SiORQwc+bM2OVUFRUVhT6+efNm3/LcuXPTqr8i4pk4EZHDGMSJiBzGIE5E5LBKMyZumzp1qm+5R48eXjruq7q2r776yrd8xhlneOmVK1em3zjKCvsGDoD/Zg/jxo0LTQPAxx9/7KWPP/74LLWO0lWzZk3fcvBnExJefPHFXDQnL3gmTkTkMAZxIiKHVcrhlOC0wcsvv9xL29/4inPqqaf6lvlNv4pt5MiRvuWBAwd66fr163vp4LcDFy5cmN2GUbkccsghvuUuXbqEltu2bVsumpMXPBMnInIYgzgRkcMYxImIHFZpxsTtcfDOnTv7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\n", "text/plain": [ "

" ] }, "metadata": { "needs_background": "light" }, "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": { "needs_background": "light" }, "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 3, tensor(0), tensor([0.5551, 0.4449]))" ] }, "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 }