人们如何证明计算机视觉方法的正确性?

时间:2012-04-06 23:20:06

标签: algorithm opencv computer-vision proof correctness

我想提出一些关于计算机视觉研究的抽象问题。我无法通过搜索网页和阅读论文来回答这些问题。

  1. 有人知道计算机视觉算法是否正确吗?
  2. 我们如何在计算机视觉的背景下定义“正确”?
  3. 正式证明是否在理解计算机视觉算法的正确性方面起作用?
  4. 一点背景:我即将开始攻读计算机科学博士学位。我喜欢设计快速并行算法并证明这些算法的正确性。我也从一些课程项目中使用过OpenCV,虽然我没有太多正式的计算机视觉培训。

    我接触过一位潜在的论文顾问,他致力于为计算机视觉(例如快速图像分割)设计更快,更可扩展的算法。我正在努力了解解决计算机视觉问题的常见做法。

4 个答案:

答案 0 :(得分:3)

你只是不证明他们。

您可以在一组测试用例上测试您的算法,并将输出与先前已知的算法或正确答案进行比较(例如,当您识别时),而不是通常无法做到的正式证明在文本中,您可以生成一组图像,让您知道文本的内容。

答案 1 :(得分:2)

这是我个人的意见,所以请把它当作值得的。

您现在无法证明大多数计算机视觉方法的正确性。我认为目前大多数方法都是某种“配方”,其中成分被抛弃,直到“结果”足够好。你能证明布朗尼蛋糕是正确的吗?

在机器学习如何演变方面有点类似。起初,人们做了神经网络,但它只是一个大的“汤”,恰好或多或少地起作用。它有时工作,没有其他情况,没有人真正知道原因。然后通过一些真正的数学备份开始统计学习(通过Vapnik等)。您可以证明您拥有最小化特定损失函数的唯一超平面,PCA为您提供了与给定矩阵最接近的固定秩矩阵(考虑到我相信的Frobenius范数)等等。

现在,计算机视觉中仍有一些“正确”的东西,但它们非常有限。我想到的是wavelet :它们是正交函数基础中的最稀疏表示。 (即:表示具有最小误差的图像近似值的最压缩方式)

答案 2 :(得分:2)

在实践中,计算机视觉更像是一种经验科学:您收集数据,想出可以解释数据某些方面的简单假设,然后检验这些假设。对于像面部识别这样的高级CV任务,您通常没有明确的“正确”定义,因此无法证明其正确性。

低级算法是另一回事:你通常在这里有一个明确的,“正确”的数学定义。例如,如果您发明的算法可以比已知算法更有效地计算中值滤波器或形态学运算,或者可以更好地并行化,那么您当然必须证明它的正确性,就像任何其他算法一样。

对可以形式化的计算机视觉算法有一定的要求也是很常见的:例如,您可能希望算法对旋转和平移不变 - 这些属性可以正式证明。有时也可以创建信号和噪声的数学模型,并设计一个具有最佳信噪比的滤波器(IIRC Wiener滤波器或Canny边缘检测器就是这样设计的。)

许多图像处理/计算机视觉算法具有某种“重复直到收敛”循环(例如蛇或Navier-Stokes修复和其他基于PDE的方法)。您至少会尝试证明算法收敛于任何输入。

答案 3 :(得分:1)

计算机视觉算法与您可以证明的定理不同,它们通常会尝试将图像数据解释为我们人类更容易理解的术语。像人脸识别,运动检测,视频监控等。精确的正确性是无法计算的,就像图像压缩算法一样,您可以根据图像的大小轻松找到结果。 用于在计算机视觉方法(尤其是分类问题)中显示结果的最常用方法是精确度Vs回忆图,精度Vs误报。这些是在各种站点上可用的标准数据库上测量的。通常,为正确检测设置参数越苛刻,您产生的误报就越多。典型的做法是根据您对“应用程序可容忍多少误报”的要求从图表中选择点。