Spaces:
Runtime error
Runtime error
guimcc
commited on
Commit
•
df8f91f
1
Parent(s):
58d9df7
updated app
Browse files
app.py
CHANGED
@@ -1,10 +1,10 @@
|
|
|
|
1 |
import gradio as gr
|
2 |
from transformers import SegformerForSemanticSegmentation, SegformerImageProcessor
|
3 |
from torchvision.transforms import ColorJitter, functional as F
|
4 |
from PIL import Image, ImageDraw, ImageFont
|
5 |
import numpy as np
|
6 |
import torch
|
7 |
-
import torch.nn as nn
|
8 |
from datasets import load_dataset
|
9 |
import evaluate
|
10 |
|
@@ -18,9 +18,10 @@ lora_model_id = "guimCC/segformer-v0-gta-cityscapes"
|
|
18 |
original_model = SegformerForSemanticSegmentation.from_pretrained(original_model_id).to(device)
|
19 |
lora_model = SegformerForSemanticSegmentation.from_pretrained(lora_model_id).to(device)
|
20 |
|
21 |
-
# Load the dataset and
|
22 |
dataset = load_dataset("Chris1/cityscapes", split="validation")
|
23 |
-
sampled_dataset =
|
|
|
24 |
|
25 |
# Define your custom image processor
|
26 |
jitter = ColorJitter(brightness=0.25, contrast=0.25, saturation=0.25, hue=0.1)
|
@@ -66,7 +67,7 @@ def compute_miou(logits, labels):
|
|
66 |
with torch.no_grad():
|
67 |
logits_tensor = torch.from_numpy(logits)
|
68 |
# Scale the logits to the size of the label
|
69 |
-
logits_tensor =
|
70 |
logits_tensor,
|
71 |
size=labels.shape[-2:],
|
72 |
mode="bilinear",
|
@@ -90,9 +91,13 @@ def compute_miou(logits, labels):
|
|
90 |
reduce_labels=processor.do_reduce_labels,
|
91 |
)
|
92 |
|
93 |
-
|
94 |
-
|
95 |
-
|
|
|
|
|
|
|
|
|
96 |
def apply_color_palette(segmentation):
|
97 |
colored_segmentation = palette[segmentation]
|
98 |
return Image.fromarray(colored_segmentation.astype(np.uint8))
|
@@ -123,9 +128,7 @@ def create_legend():
|
|
123 |
|
124 |
return legend
|
125 |
|
126 |
-
|
127 |
-
|
128 |
-
def inference(index, a):
|
129 |
"""Run inference on the input image with both models."""
|
130 |
image = sampled_dataset[index]['image'] # Fetch image from the sampled dataset
|
131 |
pixel_values = preprocess_image(image)
|
@@ -140,28 +143,15 @@ def inference(index, a):
|
|
140 |
lora_outputs = lora_model(pixel_values=pixel_values)
|
141 |
lora_segmentation = postprocess_predictions(lora_outputs.logits)
|
142 |
|
143 |
-
# Compute mIoU
|
144 |
-
true_labels = np.array(sampled_dataset[index]['semantic_segmentation'])
|
145 |
-
original_miou = compute_miou(original_outputs.logits.detach().cpu().numpy(), true_labels)
|
146 |
-
lora_miou = compute_miou(lora_outputs.logits.detach().cpu().numpy(), true_labels)
|
147 |
-
# original_miou = 0
|
148 |
-
# lora_miou = 0
|
149 |
-
|
150 |
# Apply color palette
|
151 |
original_segmentation_image = apply_color_palette(original_segmentation)
|
152 |
lora_segmentation_image = apply_color_palette(lora_segmentation)
|
153 |
|
154 |
-
# Create legend
|
155 |
-
legend = create_legend()
|
156 |
-
|
157 |
# Return the original image, the segmentations, and mIoU
|
158 |
return (
|
159 |
image,
|
160 |
original_segmentation_image,
|
161 |
lora_segmentation_image,
|
162 |
-
legend,
|
163 |
-
f"Original Model mIoU: {original_miou:.2f}",
|
164 |
-
f"LoRA Model mIoU: {lora_miou:.2f}"
|
165 |
)
|
166 |
|
167 |
# Create a list of image options for the user to select from
|
@@ -175,15 +165,13 @@ iface = gr.Interface(
|
|
175 |
gr.Image(type="pil", label="Legend", value=create_legend)
|
176 |
],
|
177 |
outputs=[
|
178 |
-
gr.Image(type="pil", label="
|
179 |
-
gr.Image(type="pil", label="Original Model
|
180 |
-
gr.Image(type="pil", label="LoRA Model
|
181 |
-
|
182 |
-
gr.Textbox(label="LoRA Model mIoU")
|
183 |
],
|
184 |
-
|
185 |
-
description="Select an image from the Cityscapes dataset to see the segmentation results from both the original and fine-tuned Segformer models.",
|
186 |
)
|
187 |
|
188 |
# Launch the interface
|
189 |
-
iface.launch()
|
|
|
1 |
+
import random
|
2 |
import gradio as gr
|
3 |
from transformers import SegformerForSemanticSegmentation, SegformerImageProcessor
|
4 |
from torchvision.transforms import ColorJitter, functional as F
|
5 |
from PIL import Image, ImageDraw, ImageFont
|
6 |
import numpy as np
|
7 |
import torch
|
|
|
8 |
from datasets import load_dataset
|
9 |
import evaluate
|
10 |
|
|
|
18 |
original_model = SegformerForSemanticSegmentation.from_pretrained(original_model_id).to(device)
|
19 |
lora_model = SegformerForSemanticSegmentation.from_pretrained(lora_model_id).to(device)
|
20 |
|
21 |
+
# Load the dataset and select 10 random images
|
22 |
dataset = load_dataset("Chris1/cityscapes", split="validation")
|
23 |
+
#sampled_dataset = random.sample(list(dataset), 10) # Select 10 random examples
|
24 |
+
sampled_dataset = dataset[:10] # Select the first 10 examples
|
25 |
|
26 |
# Define your custom image processor
|
27 |
jitter = ColorJitter(brightness=0.25, contrast=0.25, saturation=0.25, hue=0.1)
|
|
|
67 |
with torch.no_grad():
|
68 |
logits_tensor = torch.from_numpy(logits)
|
69 |
# Scale the logits to the size of the label
|
70 |
+
logits_tensor = F.interpolate(
|
71 |
logits_tensor,
|
72 |
size=labels.shape[-2:],
|
73 |
mode="bilinear",
|
|
|
91 |
reduce_labels=processor.do_reduce_labels,
|
92 |
)
|
93 |
|
94 |
+
mean_iou = metrics.get('mean_iou', 0.0)
|
95 |
+
|
96 |
+
if np.isnan(mean_iou):
|
97 |
+
mean_iou = 0.0 # Handle NaN values gracefully
|
98 |
+
|
99 |
+
return mean_iou
|
100 |
+
|
101 |
def apply_color_palette(segmentation):
|
102 |
colored_segmentation = palette[segmentation]
|
103 |
return Image.fromarray(colored_segmentation.astype(np.uint8))
|
|
|
128 |
|
129 |
return legend
|
130 |
|
131 |
+
def inference(index, legend):
|
|
|
|
|
132 |
"""Run inference on the input image with both models."""
|
133 |
image = sampled_dataset[index]['image'] # Fetch image from the sampled dataset
|
134 |
pixel_values = preprocess_image(image)
|
|
|
143 |
lora_outputs = lora_model(pixel_values=pixel_values)
|
144 |
lora_segmentation = postprocess_predictions(lora_outputs.logits)
|
145 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
# Apply color palette
|
147 |
original_segmentation_image = apply_color_palette(original_segmentation)
|
148 |
lora_segmentation_image = apply_color_palette(lora_segmentation)
|
149 |
|
|
|
|
|
|
|
150 |
# Return the original image, the segmentations, and mIoU
|
151 |
return (
|
152 |
image,
|
153 |
original_segmentation_image,
|
154 |
lora_segmentation_image,
|
|
|
|
|
|
|
155 |
)
|
156 |
|
157 |
# Create a list of image options for the user to select from
|
|
|
165 |
gr.Image(type="pil", label="Legend", value=create_legend)
|
166 |
],
|
167 |
outputs=[
|
168 |
+
gr.Image(type="pil", label="Input Image"),
|
169 |
+
gr.Image(type="pil", label="Original Model Prediction"),
|
170 |
+
gr.Image(type="pil", label="LoRA Model Prediction"),
|
171 |
+
|
|
|
172 |
],
|
173 |
+
live=True
|
|
|
174 |
)
|
175 |
|
176 |
# Launch the interface
|
177 |
+
iface.launch()
|