Priyanka-Kumavat-At-TE
commited on
Commit
•
4a75cb7
1
Parent(s):
be09297
Upload 19 files
Browse files- FRCNN_MODEL_3Classes_100Epochs.pth +3 -0
- Training_jupyterFile.ipynb +0 -0
- app.py +133 -0
- img1.jpg +0 -0
- img10.jpg +0 -0
- img11.jpg +0 -0
- img12.jpg +0 -0
- img13.jpg +0 -0
- img14.jpg +0 -0
- img15.jpg +0 -0
- img16.jpg +0 -0
- img2.jpg +0 -0
- img3.jpg +0 -0
- img4.jpg +0 -0
- img5.jpg +0 -0
- img6.jpg +0 -0
- img8.jpg +0 -0
- img9.jpg +0 -0
- requirements.txt +11 -0
FRCNN_MODEL_3Classes_100Epochs.pth
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:ea6c7bed92de7ef93e4c81ce566b87d246172fb3a643154580899b5031944e06
|
3 |
+
size 76062139
|
Training_jupyterFile.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
app.py
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import torch
|
3 |
+
import torchvision
|
4 |
+
import torchvision.transforms as transforms
|
5 |
+
from torchvision import datasets, models
|
6 |
+
from torchvision.transforms import functional as FT
|
7 |
+
from torchvision import transforms as T
|
8 |
+
from torch import nn, optim
|
9 |
+
from torch.nn import functional as F
|
10 |
+
from torch.utils.data import DataLoader, sampler, random_split, Dataset
|
11 |
+
from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
|
12 |
+
from torchvision.transforms import ToTensor
|
13 |
+
from PIL import Image, ImageDraw
|
14 |
+
from pycocotools.coco import COCO
|
15 |
+
import cv2
|
16 |
+
import numpy as np
|
17 |
+
import pandas as pd
|
18 |
+
import os
|
19 |
+
|
20 |
+
|
21 |
+
import tempfile
|
22 |
+
from tempfile import NamedTemporaryFile
|
23 |
+
|
24 |
+
dataset_path = "Dataset"
|
25 |
+
|
26 |
+
#load classes
|
27 |
+
coco = COCO(os.path.join(dataset_path, "train", "_annotations.coco.json"))
|
28 |
+
categories = coco.cats
|
29 |
+
n_classes = len(categories.keys())
|
30 |
+
|
31 |
+
# load the faster rcnn model
|
32 |
+
modeltest = models.detection.fasterrcnn_mobilenet_v3_large_fpn(num_classes=4)
|
33 |
+
in_features = modeltest.roi_heads.box_predictor.cls_score.in_features # we need to change the head
|
34 |
+
modeltest.roi_heads.box_predictor = models.detection.faster_rcnn.FastRCNNPredictor(in_features, n_classes)
|
35 |
+
|
36 |
+
# Load the saved parameters into the model
|
37 |
+
modeltest.load_state_dict(torch.load("FRCNN_MODEL_3Classes_100Epochs.pth"))
|
38 |
+
|
39 |
+
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
|
40 |
+
modeltest.to(device)
|
41 |
+
|
42 |
+
# Number of classes
|
43 |
+
classes = ['pole', 'cross_arm', 'pole', 'tag']
|
44 |
+
|
45 |
+
st.title(""" Object Detection Using Faster-RCNN For Electrical Domain """)
|
46 |
+
|
47 |
+
# st.subheader("Prediction of Object Detection")
|
48 |
+
|
49 |
+
images = ["img16.jpg","img1.jpg","img2.jpg","img3.jpg","img4.jpg","img5.jpg","img6.jpg","img8.jpg",
|
50 |
+
"img10.jpg","img11.jpg","img12.jpg","img13.jpg","img14.jpg","img15.jpg","img9.jpg"]
|
51 |
+
|
52 |
+
with st.sidebar:
|
53 |
+
st.write("Choose an Image from Sample Images ")
|
54 |
+
st.image(images)
|
55 |
+
|
56 |
+
# with st.sidebar:
|
57 |
+
# st.write("Choose an Image From The DropDown")
|
58 |
+
# selected_image = st.selectbox("Select an image", images)
|
59 |
+
|
60 |
+
|
61 |
+
# with st.sidebar:
|
62 |
+
# st.write("Choose an Image")
|
63 |
+
# for image in images:
|
64 |
+
# with Image.open(image) as img:
|
65 |
+
# st.image(img, width=100, quality=90) # quality parameter is not there in image, it will give error
|
66 |
+
|
67 |
+
# with st.sidebar:
|
68 |
+
# st.write("Choose an Image")
|
69 |
+
# st.image(images,width=100)
|
70 |
+
|
71 |
+
|
72 |
+
# define the function to perform object detection on an image
|
73 |
+
def detect_objects(image_path):
|
74 |
+
# load the image
|
75 |
+
image = Image.open(image_path).convert('RGB')
|
76 |
+
|
77 |
+
# convert the image to a tensor
|
78 |
+
image_tensor = ToTensor()(image).to(device)
|
79 |
+
|
80 |
+
# run the image through the model to get the predictions
|
81 |
+
modeltest.eval()
|
82 |
+
with torch.no_grad():
|
83 |
+
predictions = modeltest([image_tensor])
|
84 |
+
|
85 |
+
# filter out the predictions below the threshold
|
86 |
+
threshold = 0.5
|
87 |
+
scores = predictions[0]['scores'].cpu().numpy()
|
88 |
+
boxes = predictions[0]['boxes'].cpu().numpy()
|
89 |
+
labels = predictions[0]['labels'].cpu().numpy()
|
90 |
+
mask = scores > threshold
|
91 |
+
scores = scores[mask]
|
92 |
+
boxes = boxes[mask]
|
93 |
+
labels = labels[mask]
|
94 |
+
|
95 |
+
# create a new image with the predicted objects outlined in rectangles
|
96 |
+
draw = ImageDraw.Draw(image)
|
97 |
+
for box, label in zip(boxes, labels):
|
98 |
+
|
99 |
+
# draw the rectangle around the object
|
100 |
+
draw.rectangle([(box[0], box[1]), (box[2], box[3])], outline='red')
|
101 |
+
|
102 |
+
# write the object class above the rectangle
|
103 |
+
class_name = classes[label]
|
104 |
+
draw.text((box[0], box[1]), class_name, fill='yellow')
|
105 |
+
|
106 |
+
# show the image
|
107 |
+
st.write("Obects detected in the image are: ")
|
108 |
+
st.image(image, use_column_width=True)
|
109 |
+
# st.image.show()
|
110 |
+
|
111 |
+
file = st.file_uploader('Upload an Image', type=(["jpeg", "jpg", "png"]))
|
112 |
+
|
113 |
+
|
114 |
+
if file is None:
|
115 |
+
st.write("Please upload an image file")
|
116 |
+
else:
|
117 |
+
image = Image.open(file)
|
118 |
+
st.write("Input Image")
|
119 |
+
st.image(image, use_column_width=True)
|
120 |
+
with NamedTemporaryFile(dir='.', suffix='.') as f:
|
121 |
+
f.write(file.getbuffer())
|
122 |
+
# your_function_which_takes_a_path(f.name)
|
123 |
+
detect_objects(f.name)
|
124 |
+
|
125 |
+
st.subheader("Model Description : ")
|
126 |
+
st.write(""" The Faster R-CNN model with MobileNet V3 Large as the backbone and Feature Pyramid Network (FPN) architecture is a popular
|
127 |
+
object detection model that combines high detection accuracy with efficient computation. The MobileNet V3 Large backbone
|
128 |
+
is a lightweight neural network architecture that reduces the number of parameters while maintaining high accuracy,
|
129 |
+
making it suitable for mobile and embedded devices. The FPN architecture enhances the feature representation of the model
|
130 |
+
by aggregating features from multiple scales and improving spatial resolution. This combination of a lightweight backbone
|
131 |
+
with an efficient feature extraction architecture makes Faster R-CNN with MobileNet V3 Large FPN a popular choice for
|
132 |
+
object detection in real-time applications and on devices with limited computational resources.
|
133 |
+
""")
|
img1.jpg
ADDED
img10.jpg
ADDED
img11.jpg
ADDED
img12.jpg
ADDED
img13.jpg
ADDED
img14.jpg
ADDED
img15.jpg
ADDED
img16.jpg
ADDED
img2.jpg
ADDED
img3.jpg
ADDED
img4.jpg
ADDED
img5.jpg
ADDED
img6.jpg
ADDED
img8.jpg
ADDED
img9.jpg
ADDED
requirements.txt
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
streamlit
|
2 |
+
torch
|
3 |
+
torchvision
|
4 |
+
matplotlib
|
5 |
+
transformers
|
6 |
+
pandas
|
7 |
+
numpy
|
8 |
+
seaborn
|
9 |
+
scikit-learn
|
10 |
+
opencv-python
|
11 |
+
pycocotools
|