AI Programming with Python Nanodegree program Finle Capstone Project
Going forward, AI algorithms will be incorporated into more and more everyday applications. For example, you might want to include an image classifier in a smartphone app. To do this, you’d use a deep learning model trained on hundreds of thousands of images as part of the overall application architecture. A large part of software development in the future will be using these types of models as common parts of applications.
In this project, you’ll train an image classifier to recognize different species of flowers. You can imagine using something like this in a phone app that tells you the name of the flower your camera is looking at. In practice, you’d train this classifier, then export it for use in your application. We’ll be using this dataset of 102 flower categories.
When you’ve completed this project, you’ll have an application that can be trained on any set of labelled images. Here your network will be learning about flowers and end up as a command line application. But, what you do with your new skills depends on your imagination and effort in building a dataset.
This is the final Project of the Udacity AI with Python Nanodegree
The Code is written in Python 3.6.5 . If you don’t have Python installed you can find it here. If you are using a lower version of Python you can upgrade using the pip package, ensuring you have the latest version of pip.
To install pip run in the command Line
python -m ensurepip -- default-pip
to upgrade it
python -m pip install -- upgrade pip setuptools wheel
to upgrade Python
pip install python -- upgrade
Additional Packages that are required are: Numpy, Pandas, MatplotLib, Pytorch, PIL and json.\
You can donwload them using pip
pip install numpy pandas matplotlib pil
or conda
conda install numpy pandas matplotlib pil
In order to intall Pytorch head over to the Pytorch site select your specs and follow the instructions given.
In order to better view and work on the jupyter Notebook I encourage you to use nbviewer . You can simply copy and paste the link to this website and you will be able to edit it without any problem. Alternatively you can clone the repository using
git clone https://github.com/rajpatel-rp7/Create_Your_Own_Image_Classifier/
then in the command Line type, after you have downloaded jupyter notebook type
jupyter notebook
locate the notebook and run it.
Train a new network on a data set with train.py
python train.py data_directory
python train.py data_dor --save_dir save_directory
pytnon train.py data_dir --arch "vgg16"
python train.py data_dir --learning_rate 0.001 --hidden_layer1 120 --epochs 20
python train.py data_dir --gpu gpu
Predict flower name from an image with predict.py
along with the probability of that name. That is you’ll pass in a single image /path/to/image
and return the flower name and class probability
python predict.py /path/to/image checkpoint
python predict.py input checkpoint ---top_k 3
python predict.py input checkpoint --category_names cat_To_name.json
python predict.py input checkpoint --gpu
In order for the network to print out the name of the flower a .json file is required. If you aren’t familiar with json you can find information here. By using a .json file the data can be sorted into folders with numbers and those numbers will correspond to specific names specified in the .json file.
The data used specifically for this assignemnt are a flower database are not provided in the repository as it’s larger than what github allows. Nevertheless, feel free to create your own databases and train the model on them to use with your own projects. The structure of your data should be the following:\
The data need to comprised of 3 folders, test, train and validate. Generally the proportions should be 70% training 10% validate and 20% test.\
Inside the train, test and validate folders there should be folders bearing a specific number which corresponds to a specific category, clarified in the json file. For example if we have the image a.jpj and it is a rose it could be in a path like this /test/5/a.jpg and json file would be like this {…5:”rose”,…}. Make sure to include a lot of photos of your catagories (more than 10) with different angles and different lighting conditions in order for the network to generalize better.
As the network makes use of a sophisticated deep convolutional neural network the training process is impossible to be done by a common laptop. In order to train your models to your local machine you have three options
However, once a model is trained then a normal CPU can be used for the predict.py file and you will have an answer within some seconds.
As you can see you have a wide selection of hyperparameters available and you can get even more by making small modifications to the code. Thus it may seem overly complicated to choose the right ones especially if the training needs at least 15 minutes to be completed. So here are some hints:
*My settings were lr=0.001, dropoup=0.5, epochs= 15 and my test accuracy was 86% with densenet121 as my feature extraction model.
The checkpoint.pth file contains the information of a network trained to recognise 102 different species of flowers. I has been trained with specific hyperparameters thus if you don’t set them right the network will fail. In order to have a prediction for an image located in the path /path/to/image using my pretrained model you can simply type python predict.py /path/to/image_checkpoint.pth
This project is licensed under the MIT License - see the LICENSE.md file for details