【问题标题】:Infinity value in evaluation step评估步骤中的无穷大值
【发布时间】:2017-04-08 11:33:07
【问题描述】:

我使用机器学习估计了一个深度图,我想评估我的结果(使用 matlab)。深度图和深度真实是具有 8 位的图像(在评估之前归一化为 [0 1])。我使用 relative、rmse 和 log 10 错误来进行评估。

function result = evaluate(estimated,depthTrue,number)
  if(number == 1)
     result = relative(estimated,depthTrue);
  end
  if (number == 2)
      result = log10error(estimated,depthTrue);
  end
  if(number ==3)
      result = rmse(estimated,depthTrue);
  end
end




function result = relative(estimated,depthTrue)
  result = mean(mean(abs(estimated - depthTrue)./depthTrue));
end

function result = log10error(estimated,depthTrue)
  result = mean(mean(abs(log10(estimated) - log10(depthTrue))));
end

function result = rmse(estimated,depthTrue)
  result = sqrt(mean(mean(abs(estimated - depthTrue).^2)));
end

当我尝试对图像进行评估时,我得到了无穷大值(只有 log10error 和相对值)。经过搜索,我发现depthTrue 和estimated 可以有0 值。

log10(0)

ans =

  -Inf
5/0

ans =

   Inf

那么,我该怎么办?

【问题讨论】:

    标签: matlab depth infinity


    【解决方案1】:

    我可以想出几种方法来克服这个问题,这取决于最适合您需求的方法。您可以忽略 inf 或将它们替换为其他值。例如:

    depthTrue = rand(4);
    estimated = rand(4);
    estimated(1,1) = 0;
    % 1) ignore infs
    absdiff = abs(log10(estimated(:)) - log10(depthTrue(:)));
    result1 = mean( absdiff(~isinf(absdiff)) )
    % 2) subtitute infs
    veryHighNumber = 1e5;
    absdiff(isinf(absdiff)) = veryHighNumber; 
    result2 = mean( absdiff )
    % 3) subtitute zeros
    verySmallNumber = 1e-5;
    depthTrue(depthTrue == 0) = verySmallNumber;
    estimated(estimated == 0) = verySmallNumber;
    absdiff = abs(log10(estimated(:)) - log10(depthTrue(:)));
    result3 = mean( absdiff )
    

    【讨论】:

    • thnx 先生,我找到了解决方案,我使用了带有米的值(0 不存在)。
    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多