Spaces:
Build error
Build error
""" | |
@Date: 2021/08/02 | |
@description: | |
The 2DIoU for calculating the visible and full boundaries, such as the MP3D dataset, | |
has the following data: {'train': 0.9775843958583535, 'test': 0.9828616219607289, 'val': 0.9883810438132491}, | |
indicating that our best performance is limited to below 98.29% 2DIoU using our approach. | |
""" | |
import numpy as np | |
import matplotlib.pyplot as plt | |
from tqdm import tqdm | |
from evaluation.iou import calc_IoU_2D | |
from visualization.floorplan import draw_iou_floorplan | |
from utils.conversion import depth2xyz, uv2xyz | |
def eval_dataset_visible_IoU(dataset, show=False): | |
bar = tqdm(dataset, total=len(dataset), ncols=100) | |
iou2ds = [] | |
for data in bar: | |
bar.set_description(f"Processing {data['id']}") | |
corners = data['corners'] | |
corners = corners[corners[..., 0] + corners[..., 1] != 0] # Take effective corners | |
all_xz = uv2xyz(corners)[..., ::2] | |
visible_xz = depth2xyz(data['depth'])[..., ::2] | |
iou2d = calc_IoU_2D(all_xz, visible_xz) | |
iou2ds.append(iou2d) | |
if show: | |
layout_floorplan = draw_iou_floorplan(all_xz, visible_xz, iou2d=iou2d) | |
plt.imshow(layout_floorplan) | |
plt.show() | |
mean_iou2d = np.array(iou2ds).mean() | |
return mean_iou2d | |
def execute_eval_dataset_visible_IoU(root_dir, dataset, modes=None): | |
if modes is None: | |
modes = ["train", "test", "valid"] | |
iou2d_d = {} | |
for mode in modes: | |
print("mode: {}".format(mode)) | |
iou2d = eval_dataset_visible_IoU(dataset(root_dir, mode, patch_num=1024, | |
keys=['depth', 'visible_corners', 'corners', 'id']), show=False) | |
iou2d_d[mode] = iou2d | |
return iou2d_d | |
if __name__ == '__main__': | |
from dataset.mp3d_dataset import MP3DDataset | |
iou2d_d = execute_eval_dataset_visible_IoU(root_dir='../src/dataset/mp3d', | |
dataset=MP3DDataset, | |
modes=['train', 'test', 'val']) | |
print(iou2d_d) | |