janakg commited on
Commit
eeea929
·
1 Parent(s): f64a3c9

img classification

Browse files
Files changed (3) hide show
  1. .gitignore +2 -0
  2. app-2.py +65 -0
  3. app.py +49 -13
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ __pycache__/app.cpython-310.pyc
2
+ data
app-2.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Importing necessary libraries
2
+ import gradio as gr
3
+ import torch
4
+ import torchvision.transforms as transforms
5
+ from torchvision.models import resnet18
6
+ from torchvision.datasets import CIFAR10
7
+ from torch.nn import functional as F
8
+ import numpy as np
9
+ import matplotlib.pyplot as plt
10
+ from PIL import Image
11
+
12
+ # Load CIFAR10 pretrained model
13
+ model = resnet18(pretrained=True)
14
+ model.eval()
15
+
16
+ # Define transformation for CIFAR10
17
+ transform = transforms.Compose([
18
+ transforms.Resize((224, 224)),
19
+ transforms.ToTensor(),
20
+ transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
21
+ ])
22
+
23
+ # Load CIFAR10 dataset for example images
24
+ cifar10_dataset = CIFAR10(root='./data', train=False, download=True, transform=transform)
25
+ example_images = [cifar10_dataset[i][0] for i in range(10)]
26
+
27
+ # Define class names for CIFAR10
28
+ class_names = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
29
+
30
+ def predict(img, gradcam, num_gradcam, layer, opacity, misclassified, num_misclassified, top_classes):
31
+ # Transform and predict
32
+ img_tensor = transform(img).unsqueeze(0)
33
+ outputs = model(img_tensor)
34
+ _, predicted = outputs.max(1)
35
+ probs = F.softmax(outputs, dim=1)[0] * 100
36
+
37
+ # Get top classes
38
+ top_probs, top_labels = torch.topk(probs, min(top_classes, 10))
39
+ top_classes = [class_names[label] for label in top_labels]
40
+
41
+ # GradCAM
42
+ gradcam_images = []
43
+ if gradcam:
44
+ # TODO: Implement GradCAM
45
+ pass
46
+
47
+ # Misclassified images
48
+ misclassified_images = []
49
+ if misclassified:
50
+ # TODO: Get misclassified images
51
+ pass
52
+
53
+ return {'Prediction': top_classes, 'Probabilities': top_probs.tolist(), 'GradCAM': gradcam_images, 'Misclassified': misclassified_images}
54
+
55
+ # Gradio Interface
56
+ image = gr.inputs.Image()
57
+ gradcam = gr.inputs.Checkbox(label='Show GradCAM Images')
58
+ num_gradcam = gr.inputs.Number(label='Number of GradCAM Images', default=1, minimum=1, maximum=10)
59
+ layer = gr.inputs.Dropdown(choices=['layer1', 'layer2', 'layer3', 'layer4'], label='GradCAM Layer')
60
+ opacity = gr.inputs.Slider(minimum=0, maximum=1, default=0.5, label='Opacity')
61
+ misclassified = gr.inputs.Checkbox(label='Show Misclassified Images')
62
+ num_misclassified = gr.inputs.Number(label='Number of Misclassified Images', default=1, minimum=1, maximum=10)
63
+ top_classes = gr.inputs.Number(label='Number of Top Classes to Show', default=1, minimum=1, maximum=10)
64
+
65
+ gr.Interface(fn=predict, inputs=[image, gradcam, num_gradcam, layer, opacity, misclassified, num_misclassified, top_classes], outputs='json').launch()
app.py CHANGED
@@ -1,15 +1,51 @@
1
- import numpy as np
2
  import gradio as gr
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
- def sepia(input_img):
5
- sepia_filter = np.array([
6
- [0.393, 0.769, 0.189],
7
- [0.349, 0.686, 0.168],
8
- [0.272, 0.534, 0.131]
9
- ])
10
- sepia_img = input_img.dot(sepia_filter.T)
11
- sepia_img /= sepia_img.max()
12
- return sepia_img
13
-
14
- iface = gr.Interface(sepia, gr.Image(shape=(200, 200)), "image")
15
- iface.launch()
 
 
1
  import gradio as gr
2
+ import numpy as np
3
+
4
+ # Stub function for model inference
5
+ def cifar10_inference(image, gradcam, num_gradcam, layer, opacity, view_misclassified, num_misclassified, top_classes):
6
+ # Placeholder for model inference
7
+ # You would replace this with your actual model inference code
8
+ predictions = {"class_1": 0.1, "class_2": 0.2} # Example prediction dictionary
9
+
10
+ # Placeholder for GradCAM images
11
+ gradcam_images = []
12
+ if gradcam:
13
+ # Generate GradCAM images for the specified layer and number
14
+ for i in range(num_gradcam):
15
+ gradcam_images.append(np.random.rand(32, 32, 3)) # Example random image
16
+
17
+ # Placeholder for misclassified images
18
+ misclassified_images = []
19
+ if view_misclassified:
20
+ # Get misclassified images
21
+ for i in range(num_misclassified):
22
+ misclassified_images.append(np.random.rand(32, 32, 3)) # Example random image
23
+
24
+ return predictions, gradcam_images, misclassified_images
25
+
26
+ # Gradio interface
27
+ iface = gr.Interface(
28
+ fn=cifar10_inference,
29
+ inputs=[
30
+ gr.inputs.Image(shape=(32, 32), label="Upload Image"),
31
+ gr.inputs.Checkbox(label="View GradCAM images?"),
32
+ gr.inputs.Number(default=1, label="Number of GradCAM images", min=1, max=10),
33
+ gr.inputs.Dropdown(choices=["layer_1", "layer_2"], label="Choose a layer for GradCAM"), # Replace with your layer names
34
+ gr.inputs.Slider(minimum=0, maximum=1, default=0.5, label="Opacity"),
35
+ gr.inputs.Checkbox(label="View misclassified images?"),
36
+ gr.inputs.Number(default=1, label="Number of misclassified images", min=1, max=10),
37
+ gr.inputs.Number(default=1, label="Number of top classes to show", min=1, max=10),
38
+ ],
39
+ outputs=[
40
+ gr.outputs.Label(num_top_classes=10, label="Predictions"),
41
+ gr.outputs.Image(type="numpy", label="GradCAM Images"),
42
+ gr.outputs.Image(type="numpy", label="Misclassified Images"),
43
+ ],
44
+ examples=[
45
+ # Add paths to your 10 example images
46
+ ["example1.jpg", False, 1, "layer_1", 0.5, False, 1, 3],
47
+ ["example2.jpg", False, 1, "layer_1", 0.5, False, 1, 3],
48
+ ]
49
+ )
50
 
51
+ iface.launch()