Spaces:
Runtime error
Runtime error
# Copyright (c) Facebook, Inc. and its affiliates. | |
# Copyright (c) Meta Platforms, Inc. All Rights Reserved | |
import tqdm | |
import os | |
import os.path as osp | |
from pathlib import Path | |
import numpy as np | |
from PIL import Image | |
import scipy.io | |
def convert_pc59(mask_path, new_mask_path, pc59_dict): | |
mat = scipy.io.loadmat(mask_path) | |
mask = mat['LabelMap'] | |
mask_copy = np.ones_like(mask, dtype=np.uint8) * 255 | |
for trID, clsID in pc59_dict.items(): | |
mask_copy[mask == clsID] = trID | |
min_value = np.amin(mask_copy) | |
assert min_value >= 0, print(min_value) | |
Image.fromarray(mask_copy).save(new_mask_path, "PNG") | |
def convert_pc459(mask_path, new_mask_path): | |
mat = scipy.io.loadmat(mask_path) | |
mask = mat['LabelMap'] | |
mask = mask - 1 | |
min_value = np.amin(mask) | |
assert min_value >= 0, print(min_value) | |
Image.fromarray(mask).save(new_mask_path, "TIFF") | |
if __name__ == "__main__": | |
dataset_dir = Path(os.getenv("DETECTRON2_DATASETS", "datasets")) | |
print('Caution: we only generate the validation set!') | |
pc_path = dataset_dir / "VOCdevkit/VOC2010" | |
val_list = open(pc_path / "pascalcontext_val.txt", "r") | |
pc459_labels = open(pc_path / "labels.txt", "r") | |
pc59_labels = open(pc_path / "59_labels.txt", "r") | |
pc459_dict = {} | |
for line in pc459_labels.readlines(): | |
if ':' in line: | |
idx, name = line.split(':') | |
idx = int(idx.strip()) | |
name = name.strip() | |
pc459_dict[name] = idx | |
pc59_dict = {} | |
for i, line in enumerate(pc59_labels.readlines()): | |
name = line.split(':')[-1].strip() | |
if name is not '': | |
pc59_dict[i] = pc459_dict[name] | |
pc459_dir = pc_path / "annotations_detectron2" / "pc459_val" | |
pc459_dir.mkdir(parents=True, exist_ok=True) | |
pc59_dir = pc_path / "annotations_detectron2" / "pc59_val" | |
pc59_dir.mkdir(parents=True, exist_ok=True) | |
for line in tqdm.tqdm(val_list.readlines()): | |
fileid = line.strip() | |
ori_mask = f'{pc_path}/trainval/{fileid}.mat' | |
pc459_dst = f'{pc459_dir}/{fileid}.tif' | |
pc59_dst = f'{pc59_dir}/{fileid}.png' | |
if osp.exists(ori_mask): | |
convert_pc459(ori_mask, pc459_dst) | |
convert_pc59(ori_mask, pc59_dst, pc59_dict) |