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:
- 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