All Projects โ†’ fotisk07 โ†’ Image-Classifier

fotisk07 / Image-Classifier

Licence: MIT license
Final Project of the Udacity AI Programming with Python Nanodegree

Programming Languages

Jupyter Notebook
11667 projects
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Image-Classifier

Deep-Learning
It contains the coursework and the practice I have done while learning Deep Learning.๐Ÿš€ ๐Ÿ‘จโ€๐Ÿ’ป๐Ÿ’ฅ ๐Ÿšฉ๐ŸŒˆ
Stars: โœญ 21 (-66.67%)
Mutual labels:  udacity, image-classification, image-recognition, deeplearning, udacity-nanodegree
Deep-Learning-Coursera
Projects from the Deep Learning Specialization from deeplearning.ai provided by Coursera
Stars: โœญ 123 (+95.24%)
Mutual labels:  matplotlib, gradient-descent, backpropagation-learning-algorithm
coursera-ai-for-medicine-specialization
Programming assignments, labs and quizzes from all courses in the Coursera AI for Medicine Specialization offered by deeplearning.ai
Stars: โœญ 80 (+26.98%)
Mutual labels:  image-classification, image-recognition, deeplearning
UDACITY-Deep-Learning-Nanodegree-PROJECTS
These are the projects I did on my Udacity Deep Learning Nanodegree ๐ŸŒŸ ๐Ÿ’ป ๐Ÿ’ป. ๐Ÿ’ฅ ๐ŸŒˆ
Stars: โœญ 18 (-71.43%)
Mutual labels:  udacity, numpy, udacity-nanodegree
Deep learning projects
Stars: โœญ 28 (-55.56%)
Mutual labels:  image-classification, image-recognition, matplotlib
Thesemicolon
This repository contains Ipython notebooks and datasets for the data analytics youtube tutorials on The Semicolon.
Stars: โœญ 345 (+447.62%)
Mutual labels:  numpy, matplotlib, gradient-descent
Deeplearning cv notes
๐Ÿ““ deepleaning and cv notes.
Stars: โœญ 223 (+253.97%)
Mutual labels:  numpy, matplotlib, deeplearning
Machine-Learning-in-Python-Workshop
My workshop on machine learning using python language to implement different algorithms
Stars: โœญ 89 (+41.27%)
Mutual labels:  numpy, matplotlib, gradient-descent
Udacity-Data-Analyst-Nanodegree
Repository for the projects needed to complete the Data Analyst Nanodegree.
Stars: โœญ 31 (-50.79%)
Mutual labels:  udacity, numpy, matplotlib
DIP-In-Python
Play around with Pixel in Python
Stars: โœญ 42 (-33.33%)
Mutual labels:  numpy, matplotlib
Poke-Pi-Dex
Our deep learning for computer vision related project for nostalgic poke weebs (Sistemi digitali, Unibo).
Stars: โœญ 18 (-71.43%)
Mutual labels:  numpy, image-classification
pytorch-vit
An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
Stars: โœญ 250 (+296.83%)
Mutual labels:  image-classification, image-recognition
ICCV2021-Paper-Code-Interpretation
ICCV2021/2019/2017 ่ฎบๆ–‡/ไปฃ็ /่งฃ่ฏป/็›ดๆ’ญๅˆ้›†๏ผŒๆžๅธ‚ๅ›ข้˜Ÿๆ•ด็†
Stars: โœญ 2,022 (+3109.52%)
Mutual labels:  image-classification, image-recognition
tensorflow-image-classifier
Easily train an image classifier and then use it to label/tag other images
Stars: โœญ 29 (-53.97%)
Mutual labels:  image-classification, image-recognition
Python-for-data-analysis
No description or website provided.
Stars: โœญ 18 (-71.43%)
Mutual labels:  numpy, matplotlib
CoreML-and-Vision-with-a-pre-trained-deep-learning-SSD-model
This project shows how to use CoreML and Vision with a pre-trained deep learning SSD (Single Shot MultiBox Detector) model. There are many variations of SSD. The one weโ€™re going to use is MobileNetV2 as the backbone this model also has separable convolutions for the SSD layers, also known as SSDLite. This app can find the locations of several diโ€ฆ
Stars: โœญ 16 (-74.6%)
Mutual labels:  image-classification, image-recognition
numpy-neuralnet-exercise
Implementation of key concepts of neuralnetwork via numpy
Stars: โœญ 49 (-22.22%)
Mutual labels:  numpy, deeplearning
Object-sorting-using-Robotic-arm-and-Image-processing
Sorting objects of different colors using robotic arm and using computer vision (image processing).
Stars: โœญ 21 (-66.67%)
Mutual labels:  numpy, image-recognition
Data-Scientist-In-Python
This repository contains notes and projects of Data scientist track from dataquest course work.
Stars: โœญ 23 (-63.49%)
Mutual labels:  numpy, deeplearning
deforestation
A machine learning exercise, using KNN to classify deforested areas
Stars: โœญ 26 (-58.73%)
Mutual labels:  image-classification, image-recognition

Image Classifier

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

Prerequisites

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.

Viewing the Jyputer Notebook

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/fotisk07/Image-Classifier/

then in the command Line type, after you have downloaded jupyter notebook type

jupyter notebook

locate the notebook and run it.

Command Line Application

  • Train a new network on a data set with train.py

    • Basic Usage : python train.py data_directory
    • Prints out current epoch, training loss, validation loss, and validation accuracy as the netowrk trains
    • Options:
      • Set direcotry to save checkpoints: python train.py data_dor --save_dir save_directory
      • Choose arcitecture (alexnet, densenet121 or vgg16 available): pytnon train.py data_dir --arch "vgg16"
      • Set hyperparameters: python train.py data_dir --learning_rate 0.001 --hidden_layer1 120 --epochs 20
      • Use GPU for training: 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

    • Basic usage: python predict.py /path/to/image checkpoint
    • Options:
      • Return top K most likely classes: python predict.py input checkpoint ---top_k 3
      • Use a mapping of categories to real names: python predict.py input checkpoint --category_names cat_To_name.json
      • Use GPU for inference: python predict.py input checkpoint --gpu

Json file

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.

Data and 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.

GPU

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

  1. Cuda -- If you have an NVIDIA GPU then you can install CUDA from here. With Cuda you will be able to train your model however the process will still be time consuming
  2. Cloud Services -- There are many paid cloud services that let you train your models like AWS or Google Cloud
  3. Coogle Colab -- Google Colab gives you free access to a tesla K80 GPU for 12 hours at a time. Once 12 hours have ellapsed you can just reload and continue! The only limitation is that you have to upload the data to Google Drive and if the dataset is massive you may run out of space.

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.

Hyperparameters

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:

  • By increasing the number of epochs the accuracy of the network on the training set gets better and better however be careful because if you pick a large number of epochs the network won't generalize well, that is to say it will have high accuracy on the training image and low accuracy on the test images. Eg: training for 12 epochs training accuracy: 85% Test accuracy: 82%. Training for 30 epochs training accuracy 95% test accuracy 50%.
  • A big learning rate guarantees that the network will converge fast to a small error but it will constantly overshot
  • A small learning rate guarantees that the network will reach greater accuracies but the learning process will take longer
  • Densenet121 works best for images but the training process takes significantly longer than alexnet or vgg16

*My settings were lr=0.001, dropoup=0.5, epochs= 15 and my test accuracy was 86% with densenet121 as my feature extraction model.

Pre-Trained Network

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

Contributing

Please read CONTRIBUTING.md for the process for submitting pull requests.

Authors

  • Fotios Kapotos - Initial work
  • Udacity - Final Project of the AI with Python Nanodegree

This project is licensed under the MIT License - see the LICENSE.md file for details alt text

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].