在对疾病进行分类的同时检测皮肤的可能方法有哪些?

数据挖掘 分类 喀拉斯 张量流 图像分类
2021-09-24 17:23:53

我正在研究一个皮肤病分类问题,我成功地创建了一个分类器(TensorFlow + Keras),它可以对两种皮肤病的图像进行分类。

样本图像需要以这种方式分类:

  1. 样本是否为皮肤图像。
  2. 皮肤是否有任何两种疾病(黑色素瘤或牛皮癣)
  3. 如果发现一种疾病,它属于哪一类(CLASS1:黑色素瘤或 CLASS2:银屑病

如何创建可以执行以下任务的分类器?我需要图像定位或 CNN 或 YoLo 之类的东西吗?我应该执行哪些步骤?

我创建了一个分类器(准确率为 96%),它可以有效地对这两种疾病的图像进行分类。但它无法检测到疾病的存在(上述任务列表中的第 2 步)。

4个回答

其他答案是正确的,我只是想扩展,因为您似乎想知道第 1 步适合哪里。

我认为您应该添加另一个名为Unknown. 这个类将能够分辨出它不是人类皮肤,但最好它应该更精确。它还应该能够判断图片是否是疾病检测的良好输入。您只想对与您训练的数据“足够相似”的数据进行分类。

要训​​练的图片示例Unknown如下:

  • 随便拍的图片
  • 图片包含人皮但距离太远
  • 图片包含人体皮​​肤但分辨率不佳/模糊
  • 图片包含人体皮​​肤但光线不佳
  • 等等

当您获得Unknown课程的负面数据时,您可以通过以下两种方式之一使用它。要么训练一个通用模型,在一个模型中完成所有任务,要么训练两个专业模型。

通用型号

通过将每一个区别都归入类,为你的所有问题建立一个通用模型。您可以通过在列表中添加另一类来做到这一点Unknown@thanatoz 写道:

Healthy:   0
Melanoma:  1
Psoriasis: 2
Unknown:   3

专业模型

另一种方法是构建两个模型。一个用于皮肤检测,一个用于疾病检测,将列表中的第 1 步和第 2 步分开。

皮肤检测器 - 第一个模型对疾病一无所知,它只会判断图片是否包含人类皮肤。所以课程将是:

Unknown: 0
Skin:    1

疾病检测器 - 此模型仅在皮肤检测器验证您拥有具有代表性的人体皮肤样本时才会激活。然后,这将与@thanaztoz 答案相同,类为:

Healthy:   0
Melanoma:  1
Psoriasis: 2

您必须从患有黑色素瘤、牛皮癣和健康皮肤的皮肤中获取样本组织。

正如问题中所理解的那样,您开发了一种解决方案,可以以 96% 的准确率区分黑色素瘤和牛皮癣。您无法区分生病和健康的皮肤。

您正在寻找的模型是多类分类。哪里 CLASS3:健康的皮肤。

到目前为止你做得很好,你只需要在你的模型中包含这个类别和健康皮肤的图像。

我建议你查一等分类

当我们说分类时,我们默认谈论所谓的判别分类器。即,我们假设每个样本恰好属于一个预定义类的模型。

这不适用于您的应用程序:

  • 正如您已经说过的,如果图像根本不是皮肤怎么办?
    这个“无皮肤”类的定义不明确:除了不是皮肤之外,它还可以是任何东西。这种定义不明确的类很难用“正常”(判别)分类器进行训练,因为很难积极地描述这个类。
  • 银屑病不能预防黑色素瘤(实际上,快速的互联网搜索表明银屑病患者具有更高的癌症风险,包括某些皮肤肿瘤):即您的疾病类别并不相互排斥。

一类分类放宽了这个假设:它独立于所有其他类对每个类进行建模,因此:

  • 它不依赖于预先定义所有可能出现在示例中的类。
    在你的情况下:其他皮肤病呢?它们肯定存在 - 除非你正在寻找鉴别诊断(我不是医生 - 但我确实有黑色素瘤与牛皮癣的印象
  • 可以预测样本不属于任何已知类别。
  • 一个样本可能被预测属于多个类别(例如“正常皮肤”和“牛皮癣”或什至所有三个类别:图像可能包含一些正常皮肤和一些患病皮肤。)
  • 一般来说,一类方法可以很好地处理“非类”,即我们有一个明确定义的类而其余的没有明确定义(“不是牛皮癣” - 可以是从人造皮革到某种皮炎的任何东西)
  • 考虑皮肤(例如:不是人造皮革、不是 T 恤、没有小猫等)与正常皮肤(例如:没有皮肤病)之间的区别。您可能需要为此设置 2 个不同的类。

快速搜索后,我找到了 2 篇关于 arXiv 的论文,这可能是深度学习一类分类器的一个很好的起点:Learning Deep Features for One-Class Classification and Anomaly Detection using One-Class Neural Networks

然而,一类分类器的这些优点并不是“免费”的:比较一类分类器和判别类分类器在相同情况下,通常需要更多的训练样本才能获得与一类分类器相同的预测性能。


一般来说,医学诊断区分“诊断”和“鉴别诊断”。鉴别诊断意味着已经有信息排除了许多事情,剩下的问题是在已知的可能疾病列表之间做出决定。

虽然可以使用判别分类器来处理鉴别诊断,但其他诊断通常需要一类架构。


一类方法完全依赖于“课堂内”的例子进行训练。但是,对于验证/确认,您需要仔细选择类别外的测试样本。建议是找到预计最难正确的out-class样本。
在您的情况下,与医生讨论牛皮癣和黑色素瘤的鉴别诊断可能会揭示哪些其他皮肤病变看起来与您的目标类别相似。

此外,正如您所说,最好确保您的分类器适用于许多 BS 样本(非人类皮肤、皮革、人造皮革)。


与一类与区分分类不同的另一个考虑因素:

  • 您要检测实际病变,还是
  • 即使您拥有的图像不包含病变,您是否想对患有银屑病(或黑色素瘤)的患者进行分类(“如果您有这样的皮肤,您可能在某处有病变”)
    对于这两种疾病,这都是可以想象的:银屑病是一种全身性疾病,因此即使在病变区域之外也可能存在皮肤的特定特征。日晒会增加黑色素瘤的风险——皮肤的其他部位可能会出现这种光损伤的特征性变化,这些变化还不是癌症。

这是具有 2 个类的多类分类的简单问题:

{'Healthy':0,
 'Melanoma':1,
 'Psoriasis':2}

您可以构建自定义分类器来检测这些图像或微调预训练模型以检测以下疾病。在模型的最后一层,可以给模型一个置信度阈值,高于该阈值预测 id 是否保持。

除此之外,由于即使某处有一小块斑块,这些疾病也会存在,因此可以做的是使用TTA(测试时间增强)来发现疾病。您可以在此处阅读有关 TTA的更多信息,但需要找出一些在 Keras 中实现相同功能的方法。