in c3dm/dataset/eval_zoo.py [0:0]
def eval_p3d(cached_preds, eval_vars=None, visualize=False, \
dump_dir=None, skip_flip=False):
nim = len(cached_preds['masks'])
errs = []
mesh_db = load_p3d_meshes(cached_preds)
for imi in tqdm(range(nim)):
gt_pcl = mesh_db[cached_preds['mesh_path'][imi]]
gt_pcl_imcoord = (cached_preds['R'][imi] @ gt_pcl + cached_preds['T'][imi][:,None])
# pcl prediction
pcl_pred = cached_preds['embed_db_shape_camera_coord'][imi,:,:,0].clone()
errs_this_im = {}
pcl_out_this_im = {}
for flip in (False, True):
gt_pcl_test = gt_pcl_imcoord.clone()
if skip_flip and flip:
pass # use the previous result
else:
if flip: gt_pcl_test[2,:] *= -1.
errs_now_pcl = eval_full_pcl( \
pcl_pred[None].clone(),
gt_pcl_test[None].clone() )
pcl_full_err = float(errs_now_pcl['pcl_error'])
pcl_full_err_align = float(errs_now_pcl['pcl_error_align'])
errs_now = \
{ 'EVAL_pcl_scl_detkp': pcl_full_err,
'EVAL_pcl_corr_scl_detkp': pcl_full_err_align }
errs_this_im[flip] = errs_now
pcl_out_this_im[flip] = errs_now_pcl
decvar = 'EVAL_pcl_corr_scl_detkp' # decide whether we flip based on this
flip_better = errs_this_im[True][decvar] < errs_this_im[False][decvar]
# take the better one in case of flipping
pcl_out_this_im = pcl_out_this_im[flip_better]
errs_this_im = errs_this_im[flip_better]
if False:
from tools.vis_utils import get_visdom_connection, \
visdom_plotly_pointclouds
viz = get_visdom_connection()
from PIL import Image
im = Image.open(cached_preds['image_path'][imi]).convert('RGB')
im = torch.FloatTensor(np.array(im)).permute(2,0,1)
viz.image(im, env='pcl_debug', win='im')
pcl_gt = pcl_out_this_im['gt']
pcl_pred = pcl_out_this_im['pred']
pcl_pred_orig = pcl_out_this_im['pred_orig']
pcl_pred_align = pcl_out_this_im['pred_align']
for imii in (0,):
show = {
'gt': pcl_gt[imii].view(3, -1),
# 'pred': pcl_pred[imii].view(3, -1),
'pred_orig': pcl_pred_orig[imii].view(3, -1),
'pred_align': pcl_pred_align[imii].view(3, -1),
}
visdom_plotly_pointclouds( \
viz,
show,
'pcl_debug',
title='pcl_debug',
win='pcl_debug',
markersize=2,
height=800,
width=800,
)
import pdb; pdb.set_trace()
errs.append(errs_this_im)
results = {}
for med in (False, True): # dont show the median
for k in errs[0]:
res = torch.FloatTensor([float(err[k]) for err in errs])
res = float(res.median()) if med else float(res.mean())
results[(k+'_med') if med else k] = res
print('P3D evaluation results:')
for k, v in results.items():
print('%20s: %1.5f' % (k,v) )
if eval_vars is not None:
for eval_var in eval_vars:
assert eval_var in results, \
'evaluation variable missing! (%s)' % eval_var
print('eval vars check ok!')
# if TGT_NIMS==None:
# results = { k+'_DBG':v for k, v in results.items() }
return results, None