Compute metrics of predicted depth maps. Applies cropping and masking as necessary or specified via arguments. Refer to compute_errors for more details on metrics.
(gt, pred, interpolate=True, garg_crop=False, eigen_crop=True, dataset='nyu', min_depth_eval=0.1, max_depth_eval=10, **kwargs)
| 200 | |
| 201 | |
| 202 | def compute_metrics(gt, pred, interpolate=True, garg_crop=False, eigen_crop=True, dataset='nyu', min_depth_eval=0.1, max_depth_eval=10, **kwargs): |
| 203 | """Compute metrics of predicted depth maps. Applies cropping and masking as necessary or specified via arguments. Refer to compute_errors for more details on metrics. |
| 204 | """ |
| 205 | if 'config' in kwargs: |
| 206 | config = kwargs['config'] |
| 207 | garg_crop = config.garg_crop |
| 208 | eigen_crop = config.eigen_crop |
| 209 | min_depth_eval = config.min_depth_eval |
| 210 | max_depth_eval = config.max_depth_eval |
| 211 | |
| 212 | if gt.shape[-2:] != pred.shape[-2:] and interpolate: |
| 213 | pred = nn.functional.interpolate( |
| 214 | pred, gt.shape[-2:], mode='bilinear', align_corners=True) |
| 215 | |
| 216 | pred = pred.squeeze().cpu().numpy() |
| 217 | pred[pred < min_depth_eval] = min_depth_eval |
| 218 | pred[pred > max_depth_eval] = max_depth_eval |
| 219 | pred[np.isinf(pred)] = max_depth_eval |
| 220 | pred[np.isnan(pred)] = min_depth_eval |
| 221 | |
| 222 | gt_depth = gt.squeeze().cpu().numpy() |
| 223 | valid_mask = np.logical_and( |
| 224 | gt_depth > min_depth_eval, gt_depth < max_depth_eval) |
| 225 | |
| 226 | if garg_crop or eigen_crop: |
| 227 | gt_height, gt_width = gt_depth.shape |
| 228 | eval_mask = np.zeros(valid_mask.shape) |
| 229 | |
| 230 | if garg_crop: |
| 231 | eval_mask[int(0.40810811 * gt_height):int(0.99189189 * gt_height), |
| 232 | int(0.03594771 * gt_width):int(0.96405229 * gt_width)] = 1 |
| 233 | |
| 234 | elif eigen_crop: |
| 235 | # print("-"*10, " EIGEN CROP ", "-"*10) |
| 236 | if dataset == 'kitti': |
| 237 | eval_mask[int(0.3324324 * gt_height):int(0.91351351 * gt_height), |
| 238 | int(0.0359477 * gt_width):int(0.96405229 * gt_width)] = 1 |
| 239 | else: |
| 240 | # assert gt_depth.shape == (480, 640), "Error: Eigen crop is currently only valid for (480, 640) images" |
| 241 | eval_mask[45:471, 41:601] = 1 |
| 242 | else: |
| 243 | eval_mask = np.ones(valid_mask.shape) |
| 244 | valid_mask = np.logical_and(valid_mask, eval_mask) |
| 245 | return compute_errors(gt_depth[valid_mask], pred[valid_mask]) |
| 246 | |
| 247 | |
| 248 | #################################### Model uilts ################################################ |
no test coverage detected