diff --git a/4-manufacturing/lessons/1-train-fruit-detector/README.md b/4-manufacturing/lessons/1-train-fruit-detector/README.md index cc2b052d..70cf7034 100644 --- a/4-manufacturing/lessons/1-train-fruit-detector/README.md +++ b/4-manufacturing/lessons/1-train-fruit-detector/README.md @@ -2,7 +2,9 @@ Add a sketchnote if possible/appropriate -![Embed a video here if available](video-url) +This video gives an overview of the Azure Custom Vision service, a service that will be covered in this lesson. + +[![Custom Vision – Machine Learning Made Easy | The Xamarin Show](https://img.youtube.com/vi/TETcDLJlWR4/0.jpg)](https://www.youtube.com/watch?v=TETcDLJlWR4) ## Pre-lecture quiz @@ -57,34 +59,38 @@ Machine learning turns this around - you start with data and known outputs, and > 🎓 The process of a machine learning tool generating a model is called *training*. The inputs and known outputs are called *training data*. -For example, you could give a model millions of pictures of unripe strawberries as input training data, with the training output set as `unripe`, and millions of ripe strawberry pictures as training data with the output set as `ripe`. The ML tools will then generate a model. You then give this model a new picture of a strawberry and it will predict if the new picture is a ripe or an unripe strawberry. +For example, you could give a model millions of pictures of unripe bananas as input training data, with the training output set as `unripe`, and millions of ripe banana pictures as training data with the output set as `ripe`. The ML tools will then generate a model. You then give this model a new picture of a banana and it will predict if the new picture is a ripe or an unripe banana. > 🎓 The results of ML models are called *predictions* -![2 strawberries, a rip one with a prediction of 99.7% ripe, 0.3% unripe, and an unripe one with a prediction of 1.4% ripe, 98.6% unripe](../../../images/strawberries-ripe-vs-unripe-predictions.png) +![2 bananas, a ripe one with a prediction of 99.7% ripe, 0.3% unripe, and an unripe one with a prediction of 1.4% ripe, 98.6% unripe](../../../images/bananas-ripe-vs-unripe-predictions.png) -ML models don't give a binary answer, instead they give probabilities. For example, a model may be given a picture of a strawberry and predict `ripe` at 99.7% and `unripe` at 0.3%. Your code would then pick the best prediction and decide the strawberry is ripe. +ML models don't give a binary answer, instead they give probabilities. For example, a model may be given a picture of a banana and predict `ripe` at 99.7% and `unripe` at 0.3%. Your code would then pick the best prediction and decide the banana is ripe. The ML model used to detect images like this is called an *image classifier* - it is given labelled images, and then classifies new images based off these labels. ## Train an image classifier -To successfully train an image classifier you need millions of images. As it turns out, once you have an image classifier trained on millions or billions of assorted images, you can re-use it and re-train it using a small set of images and get great results, using a process called transfer learning. +To successfully train an image classifier you need millions of images. As it turns out, once you have an image classifier trained on millions or billions of assorted images, you can re-use it and re-train it using a small set of images and get great results, using a process called *transfer learning*. + +> 🎓 Transfer learning is where you transfer the learning from an existing ML model to a new model based off new data. Once an image classifier has been trained for a wide variety of images, it's internals are great at recognizing shapes, colors and patterns. Transfer learning allows the model to take what it has already learned in recognizing image parts, and use that to recognize new images. ![Once you can recognize shapes, they can be put into different configurations to make a boat or a cat](../../../images/shapes-to-images.png) -You can think of this as a bit like children's shape books, where once you can recognize a semi-circle, a rectangle and a triangle, you can recognize a sailboat or a cat depending on the configuration of these shapes. The image classifier can recognize the shapes, and the transfer learning teaches it what combination makes a boat or a cat - or a ripe strawberry. +You can think of this as a bit like children's shape books, where once you can recognize a semi-circle, a rectangle and a triangle, you can recognize a sailboat or a cat depending on the configuration of these shapes. The image classifier can recognize the shapes, and the transfer learning teaches it what combination makes a boat or a cat - or a ripe banana. There are a wide range of tools that can help you do this, including cloud-based services that can help you train your model, then use it via web APIs. -> 💁 Training these models takes a lot of computer power, usually via Graphics Processing Units, or GPUs. The same specialized hardware that makes graphics on your Xbox look amazing can also be used to train machine learning models. By using the cloud you have access to the power you need, just for the time you need it. +> 💁 Training these models takes a lot of computer power, usually via Graphics Processing Units, or GPUs. The same specialized hardware that makes graphics on your Xbox look amazing can also be used to train machine learning models. By using the cloud you can rent time on powerful computers with GPUSs to train these models, getting access to the computing power you need, just for the time you need it. ## Custom Vision Custom Vision is a cloud based tool for training image classifiers. It allows you to train a classifier using only a small number of images. You can upload images through a web portal, web API or an SDK, giving each image a *tag* that has the classification of that image. You then train the model, and test it out to see how well it performs. Once you are happy with the model, you can publish versions of it that can be accessed through a web API or an SDK. +> 💁 You can train a custom vision model with as little as 5 images per classification, but more is better. You can get better results with at least 30 images. + Custom Vision is part of a range of AI tools from Microsoft called Cognitive Services. These are AI tools that can be used either without any training, or with a small amount of training. They include speech recognition and translation, language understanding and image analysis. These are available with a free tier as services in Azure. > 💁 The free tier is more than enough to create a model, train it, then use it for development work. You can read about the limits of the free tier on the [Custom Vision Limits and quotas page on Microsoft docs](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/limits-and-quotas?WT.mc_id=academic-17441-jabenn). @@ -129,10 +135,12 @@ To use Custom Vision, you first need to create two cognitive services resources 1. Follow the [Create a new Project section of the Build a classifier quickstart on the Microsoft docs](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=academic-17441-jabenn#create-a-new-project) to create a new Custom Vision project. The UI may change and these docs are always the most up to date reference. - Call your project `food-quality-detector`. + Call your project `fruit-quality-detector`. When you create your project, make sure to use the `fruit-quality-detector-training` resource you created earlier. Use a *Classification* project type, a *Multiclass* classification type, and the *Food* domain. + ![The settings for the custom vision project with the name set to fruit-quality-detector, no description, the resource set to fruit-quality-detector-training, the project type set to classification, the classification types set to multi class and the domains set to food](../../../images/custom-vision-create-project.png) + ### Task - train your image classifier project To train an image classifier, you will need multiple pictures of fruit, both good and bad quality to tag as good and bad, such as an ripe and an overripe banana. @@ -141,22 +149,63 @@ To train an image classifier, you will need multiple pictures of fruit, both goo Ideally each picture should be just the fruit, with either a consistent background, or a wide variety of backgrounds. Ensure there's nothing in the background that is specific to ripe vs unripe fruit. -> 💁 It's important not to have specific backgrounds for each tag, otherwise the classifier may just classify based on the background. There was an example of a classifier for skin cancer that was trained on moles both normal and cancerous, and the cancerous ones all had rulers against them to measure the size. It turned out the classifier was 100% accurate at identifying rulers in pictures. +> 💁 It's important not to have specific backgrounds, or specific items that are not related to the thing being classified for each tag, otherwise the classifier may just classify based on the background. There was an example of a classifier for skin cancer that was trained on moles both normal and cancerous, and the cancerous ones all had rulers against them to measure the size. It turned out the classifier was 100% accurate at identifying rulers in pictures. + +1. Gather pictures for your classifier. You will need at least 5 pictures for each label to train the classifier, but the more the better. You will also need a few additional images to test the classifier. These images should all be different images of the same thing. For example: + + * Using 2 ripe bananas, take some pictures of each one from a few different angles, taking at least 7 pictures (5 to train, 2 to test), but ideally more. + + ![Photos of 2 different bananas](../../../images/banana-training-images.png) + + * Repeat the same process using 2 unripe bananas + + You should have at least 10 training images, with at least 5 ripe and 5 unripe, and 4 testing images, 2 ripe, 2 unripe. You're images should be png or jpegs, small than 6MB. If you create them with an iPhone for example they may be high-resolution HEIC images, so will need to be converted and possibly shrunk. The more images the better, and you should have a similar number of ripe and unripe. + + If you don't have both ripe and unripe fruit, you can use different fruits, or any two objects you have available. You can also find some example images in the [images](./images) folder of ripe and unripe bananas that you can use. + +1. Follow the [Upload and tag images section of the Build a classifier quickstart on the Microsoft docs](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=academic-17441-jabenn#upload-and-tag-images) to upload your training images. Tag the ripe fruit as `ripe`, and the unripe fruit as `unripe`. + + ![The upload dialogs showing the upload of ripe and unripe banana pictures](../../../images/image-upload-bananas.png) + +1. Follow the [Train the classifier section of the Build a classifier quickstart on the Microsoft docs](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=academic-17441-jabenn#train-the-classifier) to train the image classifier on your uploaded images. + + You will be given a choice of training type. Select **Quick Training**. + +The classifier will then train. It will take a few minutes for the training to complete. + +> 🍌 If you decide to eat your fruit whilst the classifier is training, make sure you have enough images to test with first! ## Test your image classifier +Once your classifier is trained, you can test it by giving it a new image to classify. + ### Task - test your image classifier +1. Follow the [Test and retrain a model with Custom Vision Service documentation on the Microsoft docs](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/test-your-model?WT.mc_id=academic-17441-jabenn#test-your-model) to test your image classifier. Use the testing images you created earlier, not any of the images you used for training. + + ![A unripe banana predicted as unripe with a 98.9% probability, ripe with a 1.1% probability](../../../images/banana-unripe-quick-test-prediction.png) + +1. Try all the testing images you have access to and observe the probabilities. + --- ## 🚀 Challenge +Image classifiers use machine learning to make predictions about what is in an image, based of probabilities that particular features of an image mean that it matches a particular label. It doesn't understand what is in the image - it doesn't know what a banana is or understand what makes a banana a banana instead of a boat. + +What do you think would happen if you used a picture of a strawberry with a model trained on bananas, or a picture of an inflatable banana, or a person in a banana suit, or even a yellow cartoon character like someone from the Simpsons? + +Try it out and see what the predictions are. + ## Post-lecture quiz [Post-lecture quiz](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/30) ## Review & Self Study +* When you trained your classifier, you would have seen values for *Precision*, *Recall*, and *AP* that rate the model that was created. Read up on what these values are using [the Evaluate the classifier section of the Build a classifier quickstart on the Microsoft docs](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=academic-17441-jabenn#evaluate-the-classifier) +* Read up on how to improve your classifier from the [How to improve your Custom Vision model on the Microsoft docs](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-improving-your-classifier?WT.mc_id=academic-17441-jabenn) + ## Assignment [](assignment.md) diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/testing/ripe/banana-ripe-1.png b/4-manufacturing/lessons/1-train-fruit-detector/images/testing/ripe/banana-ripe-1.png new file mode 100644 index 00000000..aca00483 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/testing/ripe/banana-ripe-1.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/testing/ripe/banana-ripe-2.png b/4-manufacturing/lessons/1-train-fruit-detector/images/testing/ripe/banana-ripe-2.png new file mode 100644 index 00000000..82c4964d Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/testing/ripe/banana-ripe-2.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/testing/unripe/banana-unripe-1.png b/4-manufacturing/lessons/1-train-fruit-detector/images/testing/unripe/banana-unripe-1.png new file mode 100644 index 00000000..8801be6e Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/testing/unripe/banana-unripe-1.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/testing/unripe/banana-unripe-2.png b/4-manufacturing/lessons/1-train-fruit-detector/images/testing/unripe/banana-unripe-2.png new file mode 100644 index 00000000..48bc2237 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/testing/unripe/banana-unripe-2.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-1.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-1.png new file mode 100644 index 00000000..f7fb01d2 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-1.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-10.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-10.png new file mode 100644 index 00000000..ec4954a3 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-10.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-11.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-11.png new file mode 100644 index 00000000..5b211ea3 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-11.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-12.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-12.png new file mode 100644 index 00000000..d0894e89 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-12.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-13.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-13.png new file mode 100644 index 00000000..0140d21c Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-13.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-14.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-14.png new file mode 100644 index 00000000..49dd0338 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-14.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-15.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-15.png new file mode 100644 index 00000000..938baa0e Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-15.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-16.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-16.png new file mode 100644 index 00000000..f2566293 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-16.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-17.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-17.png new file mode 100644 index 00000000..ea7080c9 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-17.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-18.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-18.png new file mode 100644 index 00000000..04cc12e8 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-18.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-19.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-19.png new file mode 100644 index 00000000..ca5552c6 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-19.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-2.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-2.png new file mode 100644 index 00000000..48e318a5 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-2.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-20.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-20.png new file mode 100644 index 00000000..4bc1da13 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-20.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-21.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-21.png new file mode 100644 index 00000000..02df8c27 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-21.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-22.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-22.png new file mode 100644 index 00000000..2a4a0506 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-22.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-23.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-23.png new file mode 100644 index 00000000..18f9a574 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-23.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-24.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-24.png new file mode 100644 index 00000000..c74e01a6 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-24.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-25.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-25.png new file mode 100644 index 00000000..caee5201 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-25.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-3.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-3.png new file mode 100644 index 00000000..c3f1f772 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-3.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-5.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-5.png new file mode 100644 index 00000000..906e677b Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-5.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-6.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-6.png new file mode 100644 index 00000000..ef844dc0 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-6.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-7.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-7.png new file mode 100644 index 00000000..af79b3a5 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-7.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-8.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-8.png new file mode 100644 index 00000000..d92c0bb7 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-8.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-9.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-9.png new file mode 100644 index 00000000..acda7402 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/ripe/banana-ripe-9.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-1.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-1.png new file mode 100644 index 00000000..7406226f Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-1.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-10.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-10.png new file mode 100644 index 00000000..5c6aeb4a Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-10.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-11.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-11.png new file mode 100644 index 00000000..7f9a15fe Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-11.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-12.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-12.png new file mode 100644 index 00000000..01397d31 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-12.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-13.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-13.png new file mode 100644 index 00000000..bd327d57 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-13.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-14.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-14.png new file mode 100644 index 00000000..266b79df Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-14.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-15.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-15.png new file mode 100644 index 00000000..acfb0be0 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-15.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-16.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-16.png new file mode 100644 index 00000000..d23f9daf Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-16.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-17.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-17.png new file mode 100644 index 00000000..2e7f86d6 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-17.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-18.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-18.png new file mode 100644 index 00000000..552ef62e Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-18.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-19.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-19.png new file mode 100644 index 00000000..d69e164e Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-19.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-2.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-2.png new file mode 100644 index 00000000..cfeaed93 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-2.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-20.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-20.png new file mode 100644 index 00000000..aac758ef Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-20.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-21.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-21.png new file mode 100644 index 00000000..75438f17 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-21.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-22.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-22.png new file mode 100644 index 00000000..0c7e1994 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-22.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-23.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-23.png new file mode 100644 index 00000000..5d30f2d9 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-23.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-24.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-24.png new file mode 100644 index 00000000..a8e422a8 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-24.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-25.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-25.png new file mode 100644 index 00000000..fae3c999 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-25.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-26.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-26.png new file mode 100644 index 00000000..59ee7619 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-26.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-27.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-27.png new file mode 100644 index 00000000..382a029f Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-27.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-28.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-28.png new file mode 100644 index 00000000..bcc033c6 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-28.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-29.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-29.png new file mode 100644 index 00000000..0b6452bc Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-29.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-3.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-3.png new file mode 100644 index 00000000..6d8d882b Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-3.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-4.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-4.png new file mode 100644 index 00000000..c91423a7 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-4.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-5.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-5.png new file mode 100644 index 00000000..cba41dd2 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-5.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-6.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-6.png new file mode 100644 index 00000000..a1137eb4 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-6.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-7.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-7.png new file mode 100644 index 00000000..d8ad18b6 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-7.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-8.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-8.png new file mode 100644 index 00000000..599a797b Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-8.png differ diff --git a/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-9.png b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-9.png new file mode 100644 index 00000000..73d48198 Binary files /dev/null and b/4-manufacturing/lessons/1-train-fruit-detector/images/training/unripe/banana-unripe-9.png differ diff --git a/images/Diagrams.sketch b/images/Diagrams.sketch index ac3f4a72..47f24417 100644 Binary files a/images/Diagrams.sketch and b/images/Diagrams.sketch differ diff --git a/images/banana-training-images.png b/images/banana-training-images.png new file mode 100644 index 00000000..46adc8f3 Binary files /dev/null and b/images/banana-training-images.png differ diff --git a/images/banana-unripe-quick-test-prediction.png b/images/banana-unripe-quick-test-prediction.png new file mode 100644 index 00000000..000904f9 Binary files /dev/null and b/images/banana-unripe-quick-test-prediction.png differ diff --git a/images/bananas-ripe-vs-unripe-predictions.png b/images/bananas-ripe-vs-unripe-predictions.png new file mode 100644 index 00000000..fd2e67ec Binary files /dev/null and b/images/bananas-ripe-vs-unripe-predictions.png differ diff --git a/images/custom-vision-create-project.png b/images/custom-vision-create-project.png new file mode 100644 index 00000000..9db35d9d Binary files /dev/null and b/images/custom-vision-create-project.png differ diff --git a/images/image-upload-bananas.png b/images/image-upload-bananas.png new file mode 100644 index 00000000..5940c2e3 Binary files /dev/null and b/images/image-upload-bananas.png differ diff --git a/images/strawberries-ripe-vs-unripe-predictions.png b/images/strawberries-ripe-vs-unripe-predictions.png deleted file mode 100644 index 0158ce5f..00000000 Binary files a/images/strawberries-ripe-vs-unripe-predictions.png and /dev/null differ