在线异常值检测

机器算法验证 异常值 在线算法
2022-03-19 21:30:19

我想处理自动分割的显微镜图像以检测错误图像和/或错误分割,作为高通量成像管道的一部分。可以为每个原始图像和分割计算大量参数,当图像有缺陷时,这些参数会变得“极端”。例如,图像中的气泡会导致异常,例如检测到的“细胞”中的一个尺寸很大,或者整个区域的细胞计数异常低。我正在寻找一种有效的方法来检测这些异常情况。理想情况下,我更喜欢具有以下属性的方法(大致按需要的顺序):

  1. 不需要预定义的绝对阈值(尽管预定义的百分比是可以的);

  2. 不需要将所有数据都保存在内存中,甚至不需要查看所有数据;该方法可以自适应,并在看到更多数据时更新其标准;(很明显,在系统看到足够多的数据之前,异常可能会以某种小概率发生,并且会被遗漏等)

  3. 是可并行化的:例如在第一轮中,许多并行工作的节点产生中间候选异常,然后在第一轮完成后进行第二轮选择。

我正在寻找的异常并不微妙。如果查看数据的直方图,它们是显而易见的。但是有问题的数据量,以及在生成图像时实时执行这种异常检测的最终目标,排除了任何需要人工评估人员检查直方图的解决方案。

谢谢!

4个回答

您是否考虑过类似一类分类器的东西?

您将需要一组已知良好图像的训练集,用于训练一个分类器,该分类器试图区分“像您的训练集这样的图像”和其他所有图像。David Tax的一篇论文可能包含比您实际需要的更多信息,但可能是一个不错的起点。

除了需要训练集之外,它似乎可以满足您的要求:

  • 参数是从数据中学习的(这里没有广告)

  • 获得模型后,无需将数据保存在内存中。

  • 同样,经过训练的分类器可以在尽可能多的节点上运行。

根据您的应用程序,您可能能够训练一次可用的分类器并将其重复用于不同类型的标本/染料/污渍/花团/等。或者,您可以让用户手动对每次运行的第一批中的一些进行评分——我想一个人可以通过良好的界面检查至少 5-8 个示例/分钟。

请参阅http://scholar.google.com/scholar?q=stream+outlier+detection

流式上下文已采用了一些已建立的方法,例如LOF 。当然,还有一些方法可以以流的方式更新直方图,从而标记出明显的一维异常值。这实际上对你来说就足够了吗?

有许多可能的方法,但如果没有更多信息,很难知道哪种方法最适合您的情况。

听起来,对于每个图像,您都会收到一个特征向量,它是的一个元素。如果是这种情况,这里有一些候选解决方案:Rn

  • 将所有先前图像的特征向量及其分类存储在磁盘上。定期(例如,每天一次)在这些数据上训练学习算法,并使用生成的算法对新图像进行分类。磁盘空间便宜;此解决方案可能是将离线学习算法转换为可在您的在线环境中使用的一种实用且有效的解决方案。

  • 存储 1,000(或 1,000,000)张先验图像的随机样本的特征向量及其分类。定期在此子样本上训练学习算法。

    请注意,您可以使用标准技巧以在线方式有效地更新此子样本仅当出于某种原因难以存储所有先前图像的所有特征向量时,这才有趣(这对我来说似乎很难想象,但谁知道)。

  • 对于向量中的每一个,跟踪到目前为止看到的无缺陷图像的运行平均值和标准偏差。然后,当您收到一张新图像时,如果它的任何特征至少个标准差,则将其分类为有缺陷的,否则将其分类为无缺陷的。您可以根据以及误报和误报之间的所需权衡nccn

    换句话说,你维护一个 -vector的平均值和一个 -vector的标准差,其中是第个特征向量的平均值,是该特征的标准差。当你收到一个新的特征向量时,你检查是否对于任何如果不是,则将其归类为无缺陷并更新nμnσμiiσix|xiμi|cσiiμσ

    这种方法假设来自无缺陷图像的每个参数都具有高斯分布,并且这些参数是独立的。这些假设可能是乐观的。该方案有许多更复杂的变体,它们将消除对这些假设的需要或提高性能;这只是一个简单的例子,给你一个想法。

一般来说,您可以查看在线算法和流式算法。

根据我从您的问题中了解到的情况,您在中收到了一系列向量,并且您希望将当前向量标记为离群值,因为您目前看到的所有向量。(我假设图像参数是向量的元素。)Rn

如果异常值非常明显,下面是一个可行的简单技巧。从你的向量构造一个局部敏感的散列函数。(一个简单的随机散列,比如向量落在一组随机超平面的哪一侧可能会起作用。这将产生一个布尔向量作为散列值。)现在,当您收到向量时,您计算向量的散列值并存储哈希值(超平面的布尔向量)和字典中的计数。您还可以存储迄今为止看到的向量总数。在任何给定时间,如果在哈希中与其冲突的向量总数小于总数的预定义百分比,您可以将给定向量标记为异常值。

您可以将其视为以增量方式构建直方图。但是由于数据不是单变量的,我们使用散列技巧使其表现得像它一样。