如何使用机器学习检测图像中对象的确切大小?

机器算法验证 机器学习 图像处理 物体检测
2022-04-19 01:08:07

我有一个问题,我从水下相机获取图像。与显示的对象相比,该图像相当大,因此它包含的主要是背景(海底)。图像中的对象例如是珊瑚或海绵。

在图像中,我想检测一类对象的确切大小(可能以#pixels 或其他度量单位),假设是一系列图像中的珊瑚。

我应该在这里采取哪种方法?我知道那里有很多工具,我会很感激任何关于从哪里开始和尝试什么的建议,因为我主要使用表格数据而不是图像。

使用 cnn 进行深度学习在这里效果最好吗?

非常感谢你的帮助!

2个回答

深度估计的这项任务是计算机视觉中称为 3D 重建的难题和基本问题的一部分。从图像中恢复度量信息有时称为摄影测量。这很难,因为当您从现实世界转移到图像时,您会丢失信息。

具体来说,射影变换T这需要你的 3D 点p到您的 2D 点x通过x=Tp不保持距离。自从T是一个2×3矩阵,计算T1解决T1x=p是一个欠定逆问题。这样做的结果是,像素长度通常不会对现实世界的距离有意义。通过考虑 Ames 房间视错觉的强制透视,您可以看到一个简单的示例,说明为什么进行 3D 重建很棘手:

在此处输入图像描述 (来源:伊恩·斯坦纳德https://flic.kr/p/8Pw5Rd

您的视觉处理系统和许多算法使用阴影和平行线等线索来估计深度,但这些都可以被欺骗。通常,您需要知道相机的位置,以及图像中可观察到的已知大小的东西。如果您想从摄影中获得真正准确的长度测量,则必须在数据收集过程中进行计划(将这些棋盘包含在相机视野中非常有帮助)。

这里有一堆经过充分研究的子问题:

  • 如果您有一张图像,则需要根据前面提到的图像提示来估计所有内容。这称为单目重建或深度估计。
  • 如果您有两个从不同相机同时拍摄的重叠图像,那么您可以估计图像之间的差异并使用它进行三角测量。这就是所谓的立体重建。
  • 如果您从正在移动的单个相机拍摄多张图像,您可以估计相机位置,然后进行三角测量。这称为单目同时定位和映射(monoSLAM)。
  • 如果您有许多重叠图像,您无法识别公共点、估计相机位置和三角测量,就像立体重建或 monoSLAM 一样,但您需要执行一个称为捆绑调整的额外步骤来纠正错误传播。这称为从多个图像进行 3D 重建。

关于他们是否将场景几何恢复到投影变换、仿射变换或欧几里得变换,存在一些变化。

这是一个很好的关于 3D 重建主题的论文和软件列表。一本经典的参考书是:

哈特利、理查德和安德鲁齐瑟曼。计算机视觉中的多视图几何。剑桥大学出版社,2003 年。

本文给出了一个使用 CNN 从单个 RGB 图像进行深度估计的示例(代码也可用):

莱纳、伊罗等人。“使用完全卷积残差网络进行更深层次的深度预测。” 3D Vision (3DV),2016 年第四届国际会议。IEEE,2016 年。

如果您有足够的标记数据,请使用 CNN 进行监督学习。尝试对象检测,例如 YOLO它们为您提供对象的边界框以及预测的类别。一些预训练模型也可用,最新版本(YOLO9000!)支持大约 9k 类。但不确定是否可以在那里找到您的课程。也许使用预先训练的模型,然后根据您的数据对其进行微调。

另一种方法是语义分割,类似于U-net这个会给你分割,但它需要掩码作为标签。正如我所说,如果您有标签,则有多种选择,具体取决于您拥有的标签数据量或可用数据类型。

如果您没有标记数据,也有一些无监督的图像分割方法。例如,看看这里