Tannuu18/skin-cancer-detection

GitHub: Tannuu18/skin-cancer-detection

一个基于 HAM10000 数据集的皮肤癌分类项目,结合传统机器学习与高级 CNN 以提升诊断准确率并建模不确定性。

Stars: 0 | Forks: 1

## 项目README:基于机器学习的皮肤癌分类 ### 1. 项目目标 本项目旨在利用HAM10000数据集开发并评估用于分类皮肤镜图像的机器学习模型。该数据集包含七类不同的皮肤病变,构成一个多类分类挑战。 ### 2. 数据集概述与初始数据探索(EDA) #### 数据集: HAM10000(Human Against Machine with 10000 training images)数据集包含超过10,000张皮肤镜图像。每张图像均附有诊断、年龄、性别和病变位置等元数据。 #### 关键EDA发现: * **图像特征**:原始图像为高分辨率(通常为450x600x3像素),包含皮肤纹理和颜色的精细细节。 * **类别不平衡**:一个显著的挑战是类别不平衡问题。`melanocytic nevi`('nv'——常见良性痣)类别的样本数量远高于其他更关键的类别,如`melanoma`('mel')或`basal cell carcinoma`('bcc')。这种偏差可能导致模型过度预测多数类。 * **人口统计趋势**:分析显示,基底细胞癌(bcc)和日光性角化病(akiec)在老年患者(通常为60岁以上)中更为常见,而黑色素细胞痣(nv)则在更广泛的年轻年龄范围内被发现。常见的病变部位包括背部、下肢和躯干。 ### 3. 模型开发流程 项目采用分阶段方法,逐步构建和优化分类模型: #### 阶段1:基准模型(原始像素) * **方法**:将传统机器学习模型(高斯朴素贝叶斯、决策树、K近邻、逻辑回归、随机森林)直接应用于原始展平的像素数据。图像被下采样至**32x32像素**并重塑为3,072维向量。 * **性能**:随机森林在约**71.14%**的准确率下达到最高。 * **局限性**:此阶段凸显了计算效率低下、内存限制以及对原始像素数据中噪声的高敏感性。高斯朴素贝叶斯等模型因特征独立假设而表现不佳(约40%),逻辑回归在收敛方面存在困难。 #### 阶段2:特征工程与数据平衡 为解决原始像素的局限性,引入特征工程和数据平衡技术: * **特征提取(HOG + 颜色)**: * **HOG(方向梯度直方图)**:用于捕捉形状和纹理信息。 * **颜色特征**:提取RGB通道的均值与标准差以捕捉颜色属性。 * **降维**:使用过滤方法(例如`SelectKBest`选取前100个特征)和嵌入方法(随机森林特征重要性,选取67个特征)对组合特征进行降维。 * **特征提取(LBP + 颜色)**: * **LBP(局部二值模式)**:用于局部纹理描述子。 * 与统计颜色特征结合。 * **混合PCA**:HOG + 颜色特征进一步使用PCA压缩至50个主成分。 * **数据平衡**:为对抗类别不平衡,执行**过采样**,确保每个类别在数据集中有500个样本。这对于防止模型偏向多数类至关重要。 * **工程特征下的性能**: * 传统机器学习模型表现提升。随机森林在**平衡数据与HOG + 颜色特征**上训练时,准确率显著提升至**77.49%**。 * 逻辑回归和K近邻也较原始像素性能有所改善。 #### 阶段3:超参数调优(随机森林) * **方法**:使用`GridSearchCV`对随机森林模型的超参数(例如`n_estimators`、`max_depth`、`min_samples_split`、`max_features`)进行优化,使用平衡且经过工程处理的特征。 * **优化性能**:该调优过程进一步优化了随机森林模型,准确率达到**76.46%**(注:之前的运行在调优后显示为78.86%,当前运行结果为76.46%)。 #### 阶段4:卷积神经网络(CNN)实现 * **原理**:CNN通常更适用于图像分类,因为它们能自动从原始像素数据中学习分层特征。 * **架构**:构建了一个包含多个`Conv2D`、`MaxPooling2D`、`Flatten`和`Dense`层的顺序CNN模型,并包含`Dropout`用于正则化。 * **预处理**:图像被调整为**64x64像素**并归一化到0-1范围。使用完整数据集(10,015张图像)。 * **训练增强**: * **类别权重**:在训练期间应用以减轻固有类别不平衡的影响。 * **早停法**:通过监控`val_accuracy`并设置耐心值为5个epoch,防止过拟合。 **模型检查点**:用于根据`val_accuracy`保存最佳模型权重。 * **性能**:实现的CNN准确率为**58.41%**。 #### 阶段5:具有双向模糊集与Sakaguchi损失的先进CNN **原理**:尽管进行了各种尝试,传统CNN模型仅达到58.41%的 modest 准确率。结合皮肤镜图像分类固有的不确定性(病变可能与多个类别共享特征),促使我们探索更精细的分类方法。我们引入了一种增强双向模糊集和自定义Sakaguchi损失函数的CNN架构,以显式建模不确定性和类间相似性。 **双向模糊集**:与传统硬分类(项目要么属于某类,要么不属于)或标准模糊集(仅建模隶属度)不同,双向模糊集引入了两个独立的度量:隶属函数和非隶属函数。这使得模型能够量化不仅是对某一类的证据支持,还有证据反对或不确定程度。这在医学成像中特别有用,因为诊断可能具有模糊性。我们的模型输出层被设计为对每个类别预测隶属度分数和非隶属度分数。 **Sakaguchi损失**:为进一步细化模糊病变环境中的分类,我们引入了自定义的`Sakaguchi损失`。该损失函数旨在在训练过程中利用不同皮肤病变类别之间的已知相似性。例如,某些良性病变可能在视觉上类似于恶性病变。通过将这些相似性编码到“Sakaguchi相似度矩阵”中,损失函数会惩罚那些不仅远离真实标签而且远离相似类别的预测,鼓励模型学习尊重这些生物学关系的更稳健的决策边界。 **架构**:采用预训练的`MobileNetV2`模型作为特征提取的基础。在其顶部添加自定义输出层,以生成七个皮肤病变类别的隶属和非隶属预测。基础模型的层最初被冻结。 **训练流程**: 1. **初始双向模糊训练**:模型首先使用以下配置编译: * 对`membership`输出使用`categorical_crossentropy`(标准分类)。 * 对`non_membership`输出使用`binary_crossentropy`。 * 应用`loss_weights`平衡以优先进行隶属度预测。 * 模型训练10个epoch,使用同时为非隶属输出生成逆标签的`ImageDataGenerator`,以模拟不确定性。 2. **Sakaguchi损失集成**:初始模糊训练完成后,模型重新编译。`membership`输出现在使用包含相似度矩阵的自定义`sakaguchi_loss`,而`non_membership`继续使用`binary_crossentropy`。学习率降低至`1e-5`以进行更精细的调整。此阶段运行额外5个epoch。 3. **微调**:在最后阶段,解冻`MobileNetV2`基础模型的前30层,以允许对更深层特征进行微调。模型重新编译,对两个输出使用`categorical_crossentropy`作为损失(其中由于编译更改,`non_membership`损失成为整体`categorical_crossentropy`的一部分),并训练额外5个epoch。此步骤对于将预训练特征适应皮肤镜图像的特定细微差别至关重要。 **性能(最终微调模型)**:微调后的模型在集成双向模糊集和Sakaguchi损失后,在隶属度预测上的验证准确率约为**77.78%**。 ### 4. 模型比较与分析(更新) | 模型 | 使用的特征 | 数据平衡 | 准确率 | | :------------------------------------- | :---------------------- | :------- | :--------- | | 随机森林(基准) | 原始像素(32x32) | 否 | 71.14% | | 随机森林(优化) | HOG + 颜色 | 是 | 76.46% | | 卷积神经网络(基准) | 从原始像素学习(64x64) | 是(权重)| 58.41% | |具有双向模糊和Sakaguchi的CNN** | MobileNetV2特征 | 是(增强)| **77.78%** | **分析**:集成双向模糊集和Sakaguchi损失的先进CNN模型显示出显著提升,达到了77.78%的最高准确率。这表明显式建模不确定性和利用类间相似性可以带来更有效的分类,在复杂的医学成像任务中超越了具有工程特征的传统机器学习模型和更简单的CNN架构。 ### 5. 关键发现(更新) * **特征工程强大**:对于传统机器学习模型,智能特征提取(HOG、颜色、LBP)通过提供比原始像素更抽象和稳健的表示,显著提升了性能。 * **数据平衡至关重要**:解决类别不平衡对于在所有疾病类型上实现公平且准确的预测至关重要,尤其是对于罕见病症。 * **双向模糊集用于不确定性**:集成双向模糊集为处理医学图像诊断中的固有模糊性提供了有价值的框架,使模型能够表达隶属度(肯定)和非隶属度(不确定性)。 * **Sakaguchi损失用于相似性**:自定义Sakaguchi损失有效地整合了关于类间相似性的先验知识,引导模型学习更有意义的决策边界。 * **先进CNN更优**:尽管初始CNN表现不佳,但具有双向模糊集和Sakaguchi损失的精炼CNN架构最终实现了最佳性能,展示了这些先进技术用于皮肤镜图像分类的潜力。 ### 6. 下一步与未来工作(更新) 为进一步增强模型性能,特别是基于模糊集的CNN,建议采取以下措施: * **探索不同的模糊损失形式**:研究其他形式的模糊损失函数或组合,以进一步优化隶属度与非隶属度预测之间的平衡。 * **动态Sakaguchi矩阵**:探索在训练过程中动态学习或细化相似度矩阵的方法,而非使用静态矩阵。 * **集成方法**:将模糊-Sakaguchi CNN的预测与其他高性能模型(例如优化后的随机森林)结合,以潜在地实现更高的准确率和鲁棒性。 * **可解释性**:开发方法来解释非隶属度输出,提供对模型为何对特定分类不确定的洞察。 * **真实世界评估**:在外部未见数据集上测试模型,以评估其泛化能力和临床实用性。 * **更高分辨率图像**:如果计算资源允许,使用更高分辨率的图像(例如128x128或更高)训练CNN,以捕捉在64x64下可能丢失的更多视觉细节。 * **更深的CNN架构**:实验更复杂、更深层的CNN架构或不同的层配置。 * **CNN的全面超参数调优**:使用网格搜索、随机搜索或贝叶斯优化等技术对CNN超参数(学习率、批量大小、优化器、丢弃率等)进行更彻底的搜索。 * **数据增强**:实施更激进的数据增强策略(例如旋转、翻转、缩放、颜色抖动)以人工扩展训练数据集并改善泛化能力,特别是对于少数类别。
标签:32x32 图像, AI诊断, Apex, CNN, dermoscopic images, EDA, HAM10000数据集, Keras, K近邻, Python, PyTorch, ROC, Scikit-learn, TensorFlow, 人工智能医疗, 传统机器学习, 像素向量化, 决策树, 医学影像分析, 医学诊断, 卷积神经网络, 图像预处理, 基底细胞癌, 多类分类, 数据增强, 数据探索性分析, 无后门, 机器学习, 模型评估, 深度学习, 混淆矩阵, 特征工程, 皮肤病图像, 皮肤病学, 皮肤癌分类, 类别不平衡, 计算机视觉, 迁移学习, 逆向工具, 逻辑回归, 降采样, 随机森林, 高斯朴素贝叶斯, 黑色素瘤检测