KalelPark's LAB

[ Computer Vision ] All about Depth Estimations Metrics 본문

Data Science/Depth Estimation

[ Computer Vision ] All about Depth Estimations Metrics

kalelpark 2023. 5. 6. 17:22

Depth Estimations Metrics

Depth estimation에서 주로 사용하는 지표로는 5가지가 존재합니다.

    1. Absolute Relative Error

    2. Sqaure Relative Error

    3. Root mean Sqaure Error

    4. Log scale RMSE

    5. Accuracy under a threshold

 

일반적으로, Absolute Relative Error,  Sqaure Relative Error, Root mean Sqaure Error, Log scale RMSE 은 전통적으로 Regression 모델의 성능을 측정하기 위해 사용된 Metric이며, Accuracy under threshold는 Depth estimation 모델의 Accuracy를 측정하기 위해 도입되었습니다.

Absolute/Sqaure Relative Error

Absolute Relative Error와 Sqaure Relative Error는 L1 or L2를 사용하는지와 관련하여 차이가 존재합니다. 또한 모두 분모에 d_{p}가 적용되는데, 이렇게 정규화하는 이유는 scale의 범위에 따라서 값의 크기가 많이 달라질 수 있기 때문에 0 ~ 1 사이에 값으로 정규화하는 것입니다. Depth Estimation의 출력 특성 상 거리값이 커질수록 에러가 커지기 때문에 거리 값의 범위가 달라지면 에러값의 크기가 완전히 달라지기에 주의해야 합니다. 

Depth Estimation에서 두 Metric을 사용할 때, Absolute Relative Error는 모든 영역에 대한 전반적인 성능을 확인하고, Square Relative Error의 경우에는 한계 상황에 대한 열악함 정도를 확인할 때 사용합니다. 한계 상황에서 에러가 크게 발생하기 때문에 좀 더 큰 페널티가 적용한 상태로 계산되기 때문입니다. 한 계 상황의 대표적인 예시는 원거리 영역과 객체와 배경의 경계 영역입니다.

Accuracy under threshold

Accuracy는 LIDAR point cloud를 이용하여 만든 sparse depthmap GT와 같은 Depth Estimation 모델을 통해 얻은 dense depthmap prediction 간의 accuracy를 측정하는 것을 의미합니다. 편의를 위하여 max 값을 통해 1보다 큰 값을 얻도록 하였습니다. 즉 예측값과 정답값 중 큰 값과 작은 값의 비율을 나타냅니다. 이 때, threshold 값을 이용하여, 비율이 threshold보다 작으면 True positive로 간주합니다.

* 아래의 그래프를 보면, Depth가 커질수록 오차 범위도 커짐을 알 수 있습니다.
   ( Depth가 커질수록 정밀한 예측이 어렵다는 Task 자체의 한계를 반영한 것입니다.)

def compute_depth_errors(gt, pred):   

    abs_rel = torch.mean(torch.abs(gt - pred) / gt)

    sq_rel = torch.mean((gt - pred) ** 2 / gt)
    
    rmse = (gt - pred) ** 2
    rmse = torch.sqrt(rmse.mean())

    rmse_log = (torch.log(gt) - torch.log(pred)) ** 2
    rmse_log = torch.sqrt(rmse_log.mean())


    delta = torch.max((gt / pred), (pred / gt))
    a1 = (delta < 1.25     ).float().mean()
    a2 = (delta < 1.25 ** 2).float().mean()
    a3 = (delta < 1.25 ** 3).float().mean()

    return abs_rel, sq_rel, rmse, rmse_log, a1, a2, a3

Reference

https://gaussian37.github.io/vision-depth-metrics/

 

Depth Estimation의 평가 지표 (Metric)

gaussian37's blog

gaussian37.github.io

 

Comments