具有小感兴趣区域的相似图像的二元分类

数据挖掘 机器学习 Python 张量流 图像分类 卷积神经网络
2021-10-04 20:07:16

我有一个显微镜图像数据集,我想训练一个 ML/DL 算法来执行二进制分类。类是图像中只有一个细胞,而类是其他所有细胞(即当有超过 1 个细胞或根本没有细胞时)。

下面是原始图像之一。(图像中心的弯曲部位有一个单元格)

原始图像

由于图像尺寸大(2048x2048)和信息过多(细胞只能在管系统中),我决定对它们进行预处理。因此,我将管系统外的所有内容都设置为 0(黑色),然后通过对整个数据集的图像进行平均来将所有图像裁剪到我得到的边界。您可以在下面看到最终结果。(管内有2个细胞,1个在中心,1个在左上角)

预处理图像

然后我尝试训练一个 CNN(使用 python 和 TensorFlow)。我通过改变它的超参数玩了几次,但我没有运气。我认为问题在于细胞(感兴趣区域)占据了图像的一小部分,这使得算法很难集中注意力。更糟糕的是,周围有随机的灰尘颗粒,使图像嘈杂。

您对我如何在这样的数据集中执行稳健的二进制分类有任何想法吗?

3个回答

我会使用 CLAHE 预处理、SIFT 图像特征并将错误检测到的关键点作为几何约束屏蔽。然后我会计算没有和关键点的图像中的筛选关键点以获得阈值边界并按稳健关键点的数量或逻辑回归进行分类

对于该特定应用,我仍然会坚持使用 CNN。想想 CNN 被用来在嘈杂的图像中以惊人的精度检测各种类型的癌症(斯坦福大学谷歌)。这种类型的输入实际上与您的输入非常相似,癌细胞隐藏在一组健康细胞中。然而,在某些情况下,这些模型的表现与癌症专家一样好。

CNN 已证明在使用大量数据进行训练时效果最佳。如果可能,尝试提供更多具有良好类别分布的训练数据(大致相同数量的正面和负面示例)。此外,除了调整超参数之外,您还可以尝试不同的 CNN 架构。你会在文献中找到很多灵感

我最近在做和你类似的项目。需要分类的对象很小,我正在使用微调,它可以帮助避免过度拟合,因为我的数据集大小很小(1500+)。

但是,当我将整个图像输入网络时,它就不起作用了。

对此的解释可能是:CNN 是一个下采样的过程。当您的感兴趣区域(ROI)较小时,您很有可能会丢失 CNN 层末端的 ROI 信息。

我的建议是你最好在你感兴趣的区域裁剪训练数据。它可以帮助 CNN 知道在哪里学习。测试时,您可以在将测试数据输入 CNN 之前对其进行裁剪。这样,您将有更好的机会知道整个图像中有多少个细胞。

我在我的项目中做了同样的事情。我能够实现90% 关于裁剪数据和 80%在整个图像上。如果您已经找到更好或更有效的方法,请尽可能与我分享。