DeepLearning / README.md
ArunkumarCH's picture
Create README.md
c8157a2

About this DeepLearning Model: We will build an front end application to upload the image and get the deeplearning model predicts the name of the object with acccuracy.

Steps for building the Image classification model:

  1. Image classification model using pretrained DL model 1.1 Define deeplearning model 2.2 Preprocess the data 3.3 Get prediction

1.1 Define deep learning model

import required modules

import json import numpy as np from PIL import Image import matplotlib.pyplot as plt

import pytorch related modules

import torch from torchvision import transforms from torchvision.models import densenet121

define pretrained DL model

model = densenet121(pretrained=True)

model.eval(); 1.2 Preprocess data

load image using PIL

input_image = Image.open(filename)

preprocess image according to the pretrained model

preprocess = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]) input_tensor = preprocess(input_image)

create a mini-batch as expected by the model

input_batch = input_tensor.unsqueeze(0)

pass input batch to the model

with torch.no_grad(): output = model(input_batch) 1.3 Get prediction pred = torch.nn.functional.softmax(output[0], dim=0).cpu().numpy() np.argmax(pred)

download classes on which the model was trained on

!wget https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json

get the prediction accuracy

print(classes[str(np.argmax(pred))][1], round(max(pred)*100, 2)) 2. Deploying Image Classification model 1.1 Install required libraries 1.2 Setup DL model using streamlit 1.3 Deploy DL model on AWS/Colab/HF spaces

1.1 Install required libraries !pip install -q streamlit !pip install -q pyngrok 1.2 Setup DL model using streamlit %%writefile app.py

create streamlit app

import required libraries and modules

import json import numpy as np import matplotlib.pyplot as plt

import torch from PIL import Image from torchvision import transforms from torchvision.models import densenet121

import streamlit as st

define prediction function

def predict(image): # load DL model model = densenet121(pretrained=True)

model.eval()

# load classes
with open('imagenet_class_index.json', 'r') as f:
    classes = json.load(f)

# preprocess image
preprocess = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
input_tensor = preprocess(input_image)
input_batch = input_tensor.unsqueeze(0) # create a mini-batch as expected by the model

# get prediction
with torch.no_grad():
    output = model(input_batch)

pred = torch.nn.functional.softmax(output[0], dim=0).cpu().numpy()

# return confidence and label
confidence = round(max(pred)*100, 2)
label = classes[str(np.argmax(pred))][1]

return confidence, label

define image file uploader

image = st.file_uploader("Upload image here")

define button for getting prediction

if image is not None and st.button("Get prediction"): # load image using PIL input_image = Image.open(image)

# show image
st.image(input_image, use_column_width=True)

# get prediction
confidence, label = predict(input_image)

# print results
"Model is", confidence, "% confident that this image is of a", label

1.3 Deploy DL model

run streamlit app

!streamlit run app.py &>/dev/null&

make streamlit app available publicly

from pyngrok import ngrok

public_url = ngrok.connect('8501');

public_url Model can be deployed on AWS/Colab/Flask/Hugging Spaces Hugging spaces model https://huggingface.co/spaces/ArunkumarCH/BirdClassification