zhigangjiang's picture
no message
88b0dcb
raw
history blame
2.06 kB
"""
@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)