Skip to content

Commit 6bfa952

Browse files
committed
Mapping is correct now and the baseline results looking a lot better
1 parent 2331b9a commit 6bfa952

File tree

5 files changed

+303
-28
lines changed

5 files changed

+303
-28
lines changed

mmseg/core/evaluation/metrics.py

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def intersect_and_union(pred_label,
5454
"""
5555

5656
if isinstance(pred_label, str):
57-
pred_label = torch.from_numpy(np.load(pred_label))
57+
pred_label = torch.from_numpy(np.load(pred_label))
5858
else:
5959
pred_label = torch.from_numpy((pred_label))
6060

@@ -63,26 +63,20 @@ def intersect_and_union(pred_label,
6363
mmcv.imread(label, flag='unchanged', backend='pillow'))
6464
else:
6565
label = torch.from_numpy(label)
66-
# print("label map ", label_map)
67-
if label_map is not None:
68-
for old_id, new_id in label_map.items():
69-
label[label == old_id] = new_id
66+
## I commented this out because this was being done twice (once in loading and once here)
67+
# if label_map is not None:
68+
# for old_id, new_id in label_map.items():
69+
# label[label == old_id] = new_id
7070
if reduce_zero_label:
7171
label[label == 0] = 255
7272
label = label - 1
7373
label[label == 254] = 255
74-
# label = tf.rgb_to_grayscale(label, 1)
75-
# print("label shape ", label.shape)
76-
# print("pred label: ", torch.max(pred_label))
77-
label = label[:,:,0]
78-
# print("label shape after ", label.shape)
7974
mask = (label != ignore_index)
80-
# print("pred label: ", pred_label)
81-
# print("pred label shape: ", pred_label.shape)
82-
# print("mask: ", mask)
83-
# print("mask shape: ", mask.shape)
8475
pred_label = pred_label[mask]
8576
label = label[mask]
77+
78+
print("Predicted Label (metrics.py) ", pred_label)
79+
print("Ground Truth Label (metrics.py) ", label)
8680

8781
intersect = pred_label[pred_label == label]
8882
area_intersect = torch.histc(

mmseg/datasets/aerial.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ class AerialDataset(CustomDataset):
1818
The ``img_suffix`` is fixed to '.jpg' and ``seg_map_suffix`` is fixed to
1919
'.png'.
2020
"""
21-
AERIAL_CLASSES = ('sidewalk', 'earth', 'grass', 'sand', 'water', 'rock', 'swimming pool', 'plant',
22-
'building', 'wall', 'windowpane', 'door', 'fence', 'pole', 'person', 'animal', 'car', 'bicycle', 'tree', 'television receiver', 'microwave', 'coffee table', 'trade name', 'sconce')
21+
AERIAL_CLASSES = ('sconce', 'sidewalk', 'earth', 'grass', 'sand', 'water', 'rock', 'swimming pool', 'plant',
22+
'building', 'wall', 'windowpane', 'door', 'fence', 'pole', 'person', 'animal', 'car', 'bicycle', 'tree', 'television receiver', 'microwave', 'coffee table', 'trade name')
23+
24+
# AERIAL_CLASSES = ('wall', 'building', 'tree', 'windowpane', 'grass', 'sidewalk', 'person','earth', 'door', 'plant','car', 'water','fence', 'rock', 'sand', 'coffee table', 'television receiver', 'pole','swimming pool','trade name', 'microwave', 'animal', 'bicycle','sconce')
2325
CLASSES = (
2426
'wall', 'building', 'sky', 'floor', 'tree', 'ceiling', 'road', 'bed ',
2527
'windowpane', 'grass', 'cabinet', 'sidewalk', 'person', 'earth',
@@ -46,7 +48,12 @@ class AerialDataset(CustomDataset):
4648
'plate', 'monitor', 'bulletin board', 'shower', 'radiator', 'glass',
4749
'clock', 'flag')
4850

49-
AERIAL_PALETTE = [[128, 64, 128], [130, 76, 0], [0, 102, 0], [112, 103, 87], [28, 42, 168], [48, 41, 30], [0, 50, 89], [107, 142, 35], [70, 70, 70], [102, 102, 156], [254, 228, 12], [254, 148, 12], [190, 153, 153], [153, 153, 153], [255, 22, 96], [102, 51, 0], [9, 143, 150], [119, 11, 32], [51, 51, 0], [190, 250, 190], [112, 150, 146], [2, 135, 115], [255, 0, 0], [0, 0, 0]]
51+
AERIAL_PALETTE = [[0, 0, 0], [128, 64, 128], [130, 76, 0], [0, 102, 0], [112, 103, 87], [28, 42, 168], [48, 41, 30], [0, 50, 89], [107, 142, 35], [70, 70, 70], [102, 102, 156], [254, 228, 12], [254, 148, 12], [190, 153, 153], [153, 153, 153], [255, 22, 96], [102, 51, 0], [9, 143, 150], [119, 11, 32], [51, 51, 0], [190, 250, 190], [112, 150, 146], [2, 135, 115], [255, 0, 0]]
52+
53+
54+
# AERIAL_PALETTE = [[102, 102, 156], [70, 70, 70], [51, 51, 0], [254, 228, 12], [0, 102, 0], [128, 64, 128], [255, 22, 96], [130, 76, 0], [254, 148, 12], [107, 142, 35], [9, 143, 150], [28, 42, 168], [190, 153, 153], [48, 41, 30], [112, 103, 87],[2, 135, 115], [190, 250, 190],[153, 153, 153], [0, 50, 89], [255, 0, 0],[112, 150, 146],[102, 51, 0], [190, 250, 190], [0, 0, 0]]
55+
56+
5057
PALETTE = [[120, 120, 120], [180, 120, 120], [6, 230, 230], [80, 50, 50],
5158
[4, 200, 3], [120, 120, 80], [140, 140, 140], [204, 5, 255],
5259
[230, 230, 230], [4, 250, 7], [224, 5, 255], [235, 255, 7],
@@ -96,6 +103,8 @@ def __init__(self, **kwargs):
96103
**kwargs
97104
)
98105
self.CLASSES, self.PALETTE = self.get_classes_and_palette(self.AERIAL_CLASSES, self.AERIAL_PALETTE)
106+
self.gt_seg_map_loader_cfg = None
107+
self.reduce_zero_label = False
99108
# print("self.classes len ", len(self.CLASSES))
100109
# print("self.palette len ", len(self.PALETTE))
101110

mmseg/datasets/custom.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from mmseg.utils import get_root_logger
1414
from .builder import DATASETS
1515
from .pipelines import Compose, LoadAnnotations
16+
import torch
1617

1718

1819
@DATASETS.register_module()
@@ -245,6 +246,7 @@ def get_gt_seg_map_by_idx(self, index):
245246
results = dict(ann_info=ann_info)
246247
self.pre_pipeline(results)
247248
self.gt_seg_map_loader(results)
249+
# print("GT CONFIG IN CUSTOM ", self.gt_seg_map_loader_cfg)
248250
return results['gt_semantic_seg']
249251

250252
def get_gt_seg_maps(self, efficient_test=None):
@@ -280,17 +282,19 @@ def pre_eval(self, preds, indices):
280282
indices = [indices]
281283
if not isinstance(preds, list):
282284
preds = [preds]
283-
285+
# print("indices in customs: ", indices)
284286
pre_eval_results = []
285-
# print("preds shape: ", preds[0].shape)
286287
for pred, index in zip(preds, indices):
287-
seg_map = self.get_gt_seg_map_by_idx(index)
288-
# print("seg map shape: ", seg_map.shape)
289-
# print("pred shape: ", pred.shape)
288+
# print("index in customs: ", index)
289+
seg_map = self.get_gt_seg_map_by_idx(index)
290+
print("pred in custom: ", np.amax(pred))
291+
print("seg map in custom: ", np.amax(seg_map))
290292
pre_eval_results.append(
291293
intersect_and_union(pred, seg_map, len(self.CLASSES),
292294
self.ignore_index, self.label_map,
293295
self.reduce_zero_label))
296+
297+
294298

295299
return pre_eval_results
296300

@@ -347,6 +351,7 @@ def get_classes_and_palette(self, classes=None, palette=None):
347351
def get_palette_for_custom_classes(self, class_names, palette=None):
348352

349353
if self.label_map is not None:
354+
# print("LABEL MAP IS NOT NONE IN CUSTOM")
350355
# return subset of palette
351356
palette = []
352357
for old_id, new_id in sorted(
@@ -357,6 +362,7 @@ def get_palette_for_custom_classes(self, class_names, palette=None):
357362

358363
elif palette is None:
359364
if self.PALETTE is None:
365+
# print("PALETTE IS NOT OURS IT IS RANDOM IN CUSTOM")
360366
# Get random state before set seed, and restore
361367
# random state later.
362368
# It will prevent loss of randomness, as the palette
@@ -368,6 +374,7 @@ def get_palette_for_custom_classes(self, class_names, palette=None):
368374
palette = np.random.randint(0, 255, size=(len(class_names), 3))
369375
np.random.set_state(state)
370376
else:
377+
# print("PALETTE IS OURS IN CUSTOM")
371378
palette = self.PALETTE
372379

373380
return palette

mmseg/datasets/pipelines/loading.py

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import numpy as np
66

77
from ..builder import PIPELINES
8+
from PIL import Image
89

910

1011
@PIPELINES.register_module()
@@ -120,7 +121,6 @@ def __call__(self, results):
120121
Returns:
121122
dict: The dict contains loaded semantic segmentation annotations.
122123
"""
123-
print("AYOOOOOOOOOOOO")
124124

125125
if self.file_client is None:
126126
self.file_client = mmcv.FileClient(**self.file_client_args)
@@ -130,20 +130,51 @@ def __call__(self, results):
130130
results['ann_info']['seg_map'])
131131
else:
132132
filename = results['ann_info']['seg_map']
133-
img_bytes = self.file_client.get(filename)
134-
gt_semantic_seg = mmcv.imfrombytes(
135-
img_bytes, flag='unchanged',
136-
backend=self.imdecode_backend).squeeze().astype(np.uint8)
133+
print("Filename (Loding.py) ", filename)
134+
135+
gt_semantic_seg = np.asarray(Image.open(filename))
136+
print("GT Semantic Seg Before Changing Labels (Loading.py): ", gt_semantic_seg)
137+
# img_bytes = self.file_client.get(filename)
138+
139+
# gt_semantic_seg = mmcv.imfrombytes(
140+
# img_bytes, flag='unchanged', channel_order='rgb',
141+
# backend=self.imdecode_backend).squeeze().astype(np.uint8)
142+
143+
# print("LABEL MAP IN LOAD ANN ", results['label_map'])
137144
# modify if custom classes
138145
if results.get('label_map', None) is not None:
146+
# print("LINE 142 OF LOADANN")
147+
# updated = set()
148+
# for x in range(len(gt_semantic_seg)):
149+
# for y in range(len(gt_semantic_seg[x])):
150+
# for old_id, new_id in results['label_map'].items():
151+
# if (x,y) not in updated and gt_semantic_seg[x][y] == new_id:
152+
# gt_semantic_seg[x][y] = old_id
153+
# updated.add((x,y))
154+
155+
# for old_id, new_id in results['label_map'].items():
156+
# if new_id not in updated:
157+
# if new_id in gt_semantic_seg:
158+
# gt_semantic_seg[gt_semantic_seg == new_id] = old_id
159+
# updated.add(old_id)
160+
### This is the original code
161+
# for old_id, new_id in results['label_map'].items():
162+
# gt_semantic_seg[gt_semantic_seg == new_id] = old_id
163+
updated = set()
139164
for old_id, new_id in results['label_map'].items():
140-
gt_semantic_seg[gt_semantic_seg == old_id] = new_id
165+
indices = np.argwhere(gt_semantic_seg == new_id)
166+
for index in indices:
167+
if tuple(index) not in updated:
168+
gt_semantic_seg[index[0]][index[1]] = old_id
169+
updated.add(tuple(index))
170+
141171
# reduce zero_label
142172
if self.reduce_zero_label:
143173
# avoid using underflow conversion
144174
gt_semantic_seg[gt_semantic_seg == 0] = 255
145175
gt_semantic_seg = gt_semantic_seg - 1
146176
gt_semantic_seg[gt_semantic_seg == 254] = 255
177+
print("GT Semantic Seg After Changing Labels (Loading.py) ", gt_semantic_seg)
147178
results['gt_semantic_seg'] = gt_semantic_seg
148179
results['seg_fields'].append('gt_semantic_seg')
149180
return results

notebooks/resize.ipynb

Lines changed: 234 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)