|
|
|
|
|
|
|
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) |