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