基于深度学习的CT影像肺癌检测识别

news2024/12/27 20:02:54

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 

1. 项目简介

        肺癌是全球范围内导致癌症死亡的主要原因之一,早期检测和诊断对于提高患者生存率至关重要。随着深度学习技术的迅猛发展,基于CT影像的肺癌检测识别成为了研究热点。本文介绍了一种基于深度学习的CT影像肺癌检测识别系统。该系统使用TensorFlow和Keras深度学习框架,通过迁移学习技术,以EfficientNetB3为基础模型,构建了一个卷积神经网络。通过对数据集进行扩充,利用扩充后的数据集进行模型训练,并进行模型性能评估,并利用 Flask + Bootrap + Ajax 搭建交互式分析框架,实现脑部 MRI 扫描影像上传和在线预测,模型给出是否包含脑部肿瘤及肿瘤类型,整体准确率达到90.27%

        B站详情与代码下载:基于深度学习的CT影像肺癌检测识别_哔哩哔哩_bilibili

基于深度学习的CT影像肺癌检测识别

2. 肺癌CT影像数据读取

        利用 TensorFlow 的 ImageDataGenerator 创建训练、验证和测试数据的生成器:

def create_gens(train_df, valid_df, test_df, batch_size):
    """
    定义一个函数create_gens,用于创建训练、验证和测试数据的生成器。
    参数:
    train_df -- DataFrame,包含训练数据的文件路径和标签
    valid_df -- DataFrame,包含验证数据的文件路径和标签
    test_df -- DataFrame,包含测试数据的文件路径和标签
    batch_size -- 整数,表示每次迭代读取的样本数量
    返回值:
    train_gen -- 训练数据的生成器
    valid_gen -- 验证数据的生成器
    test_gen -- 测试数据的生成器
    """
    # 设置图像的大小和通道数
    img_size = (224, 224)  # 图像的大小
    channels = 3  # 图像的通道数
    img_shape = (img_size[0], img_size[1], channels)  # 图像的形状

    # 计算测试数据的批量大小和步数
    ts_length = len(test_df)  # 测试数据的数量
    test_batch_size = max(sorted([ts_length // n for n in range(1, ts_length + 1) if ts_length % n == 0 and ts_length / n <= 80]))  # 测试数据的批量大小
    test_steps = ts_length // test_batch_size  # 测试数据的步数

    # 定义一个函数,用于对图像进行预处理
    def scalar(img):
        return img  # 这里只是一个示例,实际的预处理函数可能会更复杂

    # 创建训练数据的生成器
    tr_gen = ImageDataGenerator(preprocessing_function=scalar, horizontal_flip=True)  # 使用ImageDataGenerator创建生成器,可以进行数据增强
    train_gen = tr_gen.flow_from_dataframe(train_df, x_col='filepaths', y_col='labels', target_size=img_size, class_mode='categorical',
                                            color_mode='rgb', shuffle=True, batch_size=batch_size)  # 从DataFrame中读取数据,生成训练数据

    # 创建验证数据的生成器
    valid_gen = tr_gen.flow_from_dataframe(valid_df, x_col='filepaths', y_col='labels', target_size=img_size, class_mode='categorical',
                                            color_mode='rgb', shuffle=True, batch_size=batch_size)  # 从DataFrame中读取数据,生成验证数据

    # 创建测试数据的生成器
    test_gen = tr_gen.flow_from_dataframe(test_df, x_col='filepaths', y_col='labels', target_size=img_size, class_mode='categorical',
                                           color_mode='rgb', shuffle=False, batch_size=test_batch_size)  # 从DataFrame中读取数据,生成测试数据

    return train_gen, valid_gen, test_gen  # 返回三个生成器:训练、验证和测试数据的生成器

3. 构建肺癌检测的卷积神经网络

        在构建深度学习模型时,可以选择多种现有的神经网络架构,如VGG16、ResNet、InceptionV3等,或者使用更先进的模型如EfficientNetB3。这些模型可以通过迁移学习的方式进行微调,以适应特定的脑部肿瘤检测任务。

# 创建一个预训练的EfficientNetB3模型,不包括顶部的全连接层,使用ImageNet的权重,输入形状为img_shape,池化层使用最大池化
base_model = tf.keras.applications.efficientnet.EfficientNetB3(
    include_top=False, weights="efficientnetb3_notop.h5", input_shape=img_shape, pooling='max'
)

# 创建一个顺序模型,包含以下层:
# 1. 预训练的base_model
# 2. BatchNormalization层,用于标准化批量数据的激活值
# 3. 全连接层,有256个单元,使用L2和L1正则化以及ReLU激活函数
# 4. Dropout层,丢弃率为0.45,用于减少过拟合
# 5. 另一个全连接层,输出单元数为类别数量,使用softmax激活函数,用于多分类任务
model = Sequential([
    base_model,
    BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001),
    Dense(256, kernel_regularizer=regularizers.l2(l=0.016), activity_regularizer=regularizers.l1(0.006),
                bias_regularizer=regularizers.l1(0.006), activation='relu'),
    Dropout(rate=0.45, seed=123),
    Dense(class_count, activation='softmax')
])

# 编译模型,使用Adamax优化器,学习率为0.001,损失函数为交叉熵,评估指标为准确率
model.compile(Adamax(learning_rate=0.001), loss='categorical_crossentropy', metrics=['accuracy'])

# 打印模型的摘要信息,显示每一层的结构和参数数量
model.summary()

4. 模型训练

# 创建回调函数列表
checkpoint = tf.keras.callbacks.ModelCheckpoint('efficientnetb3_base_best_weights.h5', monitor='val_accuracy', verbose=1, mode='max',save_best_only=True)
early = tf.keras.callbacks.EarlyStopping(monitor="accuracy", mode="max",restore_best_weights=True, patience=5)
callbacks_list = [checkpoint,early]

history = model.fit(
        train_gen,
        validation_data=valid_gen,
        epochs=25, 
        shuffle=True, 
        verbose=True,
        callbacks=callbacks_list
)

 Epoch 1/25
16/16 [==============================] - ETA: 0s - loss: 8.7303 - accuracy: 0.6134
Epoch 1: val_accuracy improved from -inf to 0.42857, saving model to efficientnetb3_base_best_weights.h5
16/16 [==============================] - 115s 5s/step - loss: 8.7303 - accuracy: 0.6134 - val_loss: 10.0141 - val_accuracy: 0.4286
Epoch 2/25
16/16 [==============================] - ETA: 0s - loss: 7.6084 - accuracy: 0.8728
Epoch 2: val_accuracy improved from 0.42857 to 0.51111, saving model to efficientnetb3_base_best_weights.h5
16/16 [==============================] - 67s 4s/step - loss: 7.6084 - accuracy: 0.8728 - val_loss: 8.8468 - val_accuracy: 0.5111
Epoch 3/25
16/16 [==============================] - ETA: 0s - loss: 7.0149 - accuracy: 0.9380
Epoch 3: val_accuracy improved from 0.51111 to 0.54921, saving model to efficientnetb3_base_best_weights.h5
16/16 [==============================] - 70s 4s/step - loss: 7.0149 - accuracy: 0.9380 - val_loss: 8.2572 - val_accuracy: 0.5492

......

5. 模型预测评估

        利用训练集和验证集完成模型的训练和验证后,利用测试集进行预测评估,测试集预测准确率达到 90.28%

ts_length = len(test_df)
test_batch_size = test_batch_size = max(sorted([ts_length // n for n in range(1, ts_length + 1) if ts_length%n == 0 and ts_length/n <= 80]))
test_steps = ts_length // test_batch_size
train_score = model.evaluate(train_gen, steps= test_steps, verbose= 1)
valid_score = model.evaluate(valid_gen, steps= test_steps, verbose= 1)
test_score = model.evaluate(test_gen, steps= test_steps, verbose= 1)

print("Train Loss: ", train_score[0])
print("Train Accuracy: ", train_score[1])
print('-' * 20)
print("Validation Loss: ", valid_score[0])
print("Validation Accuracy: ", valid_score[1])
print('-' * 20)
print("Test Loss: ", test_score[0])
print("Test Accuracy: ", test_score[1])
Train Loss:  2.6708874702453613
Train Accuracy:  1.0
--------------------
Validation Loss:  3.06054425239563
Validation Accuracy:  0.8500000238418579
--------------------
Test Loss:  2.887510299682617
Test Accuracy:  0.9027777910232544

绘制模型性能评估结果的混淆矩阵:

6. CT影像肺癌检测识别系统

6.1 系统首页

6.2 肺癌在线检测

        通过上传肺癌的CT影像,点击提交预测,后台加载训练好的模型,预测是否换有肺癌及其肺癌的具体类型:

7. 总结

        本文介绍了一种基于深度学习的CT影像肺癌检测识别系统。该系统使用TensorFlow和Keras深度学习框架,通过迁移学习技术,以EfficientNetB3为基础模型,构建了一个卷积神经网络。通过对数据集进行扩充,利用扩充后的数据集进行模型训练,并进行模型性能评估,并利用 Flask + Bootrap + Ajax 搭建交互式分析框架,实现脑部 MRI 扫描影像上传和在线预测,模型给出是否包含脑部肿瘤及肿瘤类型,整体准确率达到90.27%

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)

精彩专栏推荐订阅:

1. Python数据挖掘精品实战案例

2. 计算机视觉 CV 精品实战案例

3. 自然语言处理 NLP 精品实战案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1798186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

水库安全监测系统:智慧水文动态监测系统

TH-SW2水库安全监测系统&#xff0c;作为一款智慧水文动态监测系统&#xff0c;其在现代水利管理中扮演着至关重要的角色。该系统通过集成先进的数据采集、传输、处理和分析技术&#xff0c;为水库的安全运行提供了强有力的技术支撑。 水库安全监测系统是一种用于实时监测和记…

【案例分享】印前制版工单系统:“鹿山科技”助力“铭匠数据”重塑业务流程

内容概要 本文介绍了鹿山信息科技通过明道云HAP平台的数字化解决方案提升了铭匠数据在印前制版行业的效率。周口铭匠数据科技有限公司位于河南省周口市沈丘县&#xff0c;是一家专注于印前制版设计服务的公司&#xff0c;成立于2023年。企业在销售业务、版材制作生产和美工设计…

springboot编写简述01

项目结构 Users.java package com.sust.entity;import java.io.Serializable;public class Users implements Serializable {private String name;private String password;public String getName() {return name;}public void setName(String name) {this.name name;}publ…

探索Omega-3脂肪酸:健康益处与营养补充

谷禾健康 随着国家卫生健康委发布2024版食养指南&#xff0c;以及前几天在上海举办的临床医学与营养食品论坛&#xff0c;越来越多的人开始重视日常膳食的营养与健康。 而说到脂肪&#xff0c;很多人都会“谈脂色变”&#xff0c;想要避免脂肪的摄入&#xff0c;这其实是不正确…

神经网络 torch.nn---Pooling layers(nn.MaxPool2d)

torch.nn — PyTorch 2.3 documentation torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) nn.MaxPool2d class torch.nn.MaxPool2d(kernel_size, strideNone, padding0, dilation1, return_indicesFalse, ceil_modeFalse) 参数介绍 kernel_size(int or tuple) - …

宝兰德应用服务器软件通过保险业信息技术应用创新攻关实验室产品适配测试认证

近期&#xff0c;宝兰德中间件核心产品「应用服务器软件 V9.5.5」&#xff08;以下简称&#xff1a;应用服务器软件&#xff09;顺利通过了保险业信息技术应用创新攻关实验室产品适配测试。标志着宝兰德应用服务器软件符合信息技术产品适配要求&#xff0c;能够全面支持金融保险…

小华半导体MCU方案选型和应用

小华半导体有限公司是中国电子信息产业集团有限公司旗下集成电路业务平台华大半导体有限公司的核心子公司&#xff0c;目前团队规模约300人&#xff0c;其中75%以上为研发人员&#xff0c;国内细分行业规模最大&#xff0c;核心骨干拥有国际MCU大厂25年以上从业经验。 小华半导…

“墨者杯”网络安全大赛wp

漏洞利用01 504错误修改为POST提交拿到php源码&#xff0c; 查看逻辑$_POST[roam1] ! $_POST[roam2] && sha1($_POST[roam1]) sha1($_POST[roam2]) 采用数组绕过 roam1[]1&roam2[]2 拿到phpinfo&#xff0c;观察发现 这里的意思是每个php页面都包含这个f14…

C++基类与派生类

1.派生类的定义 派生类语法如下&#xff1a; class <派生类名> : <继承方式> <基类名> { private:派生类新增成员&#xff1b; protected:派生类新增成员&#xff1b; public:派生类新增成员&#xff1b; }; 说明&#xff1a; &#xff08;1&#xff09;cla…

新手必看!场外期权交易的六大注意事项

场外期权交易的六大注意事项 对于初涉金融市场的投资者来说&#xff0c;场外期权交易无疑是一个既具吸引力又充满挑战的领域。为确保您在交易中能够稳健获利&#xff0c;以下六大注意事项值得每位新手仔细研读。 文章来源/&#xff1a;财智财经 一、深入理解期权基本概念 场…

QComboBox条目可选择状态

有时候下拉框需要根据情况&#xff0c;将某些条目设为不可点击状态&#xff0c;或者动态切换为可点击状态&#xff0c;可采用以下方法。 //item1可选ui->comboBox->setItemData(0, QVariant(-1), Qt::UserRole-1);//item2不可选ui->comboBox->setItemData(1, QVari…

kivy 百词斩项目 报错

AttributeError: FigureCanvasKivyAgg object has no attribute resize_event AttributeError: FigureCanvasKivyAgg object has no attribute resize_event 是一种常见的Python错误&#xff0c;当你试图访问一个对象&#xff08;在这个例子中是 FigureCanvasKivyAgg 对象&am…

华为鸿蒙开发-鸿蒙基于ARKTS开发之启动模式

前言 鸿蒙生态取得爆发式增长&#xff01; 截至3月底&#xff0c;已有超4000个应用加入鸿蒙生态。 而在今年1月中旬&#xff0c;华为刚宣布HarmonyOS NEXT鸿蒙星河版面向开发者开放申请&#xff0c;这一版本鸿蒙系统也被称为“纯血鸿蒙”。 当时&#xff0c;华为宣布首批200…

如何进行Android更新功能测试

Android系统是目前全球市场占有率最高的移动操作系统之一&#xff0c;每年都会发布多次更新&#xff0c;包括安全更新、功能更新等。在开发和发布新版本的过程中&#xff0c;功能测试是至关重要的一环。本文将介绍如何进行Android更新功能测试&#xff0c;并提供一些代码示例。…

19、Go Gin框架集成Swagger

介绍&#xff1a; Swagger 支持在 Gin 路由中使用一系列注释来描述 API 的各个方面。以下是一些常用的 Swagger 注释属性&#xff0c;这些属性可以在 Gin 路由的注释中使用&#xff1a; Summary: 路由的简短摘要。Description: 路由的详细描述。Tags: 用于对路由进行分类的标…

nodeJS社区新冠人群管理与老人疫苗小程序-计算机毕业设计源码65190

目 录 摘要 1 绪论 1.1背景及意义 1.2国内外研究慨况 1.3B/S体系工作原理 1.4node.js主要功能 2 1.5论文结构与章节安排 3 2 社区新冠人群管理与老人疫苗小程序分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据增加流程 5 2.3.2数据修改流程 5 2.3.3数据删除流程 5…

Linux 36.3 + JetPack v6.0@jetson-inference之语义分割

Linux 36.3 JetPack v6.0jetson-inference之语义分割 1. 源由2. segNet2.1 命令选项2.2 下载模型2.2.1 Cityscapes2.2.2 DeepScene2.2.3 MHP2.2.4 VOC2.2.5 SUN 2.3 操作示例2.3.1 单张照片2.3.2 多张照片2.3.3 视频 3. 代码3.1 Python3.2 C 4. 参考资料 1. 源由 分类和目标识…

HIK录像机GB28181对接相机不在线问题随笔

一、问题现象 【设备信息】型号&#xff1a;DS-8664N-I16-V3 V4.63.000 build 230412 【问题现象】HIK录像机使用GB28181对接异常相机无法正常上线&#xff0c;对接HIK相机可以正常上线。 【现场拓扑】现场拓扑如下 NVR侧使用固定公网IP地址。IPC侧使用家用宽带的方式&…

Intel x86+FPGA:智能AI计算机系统在支气管导航机器人的应用

随着人工智能的快速发展、技术的突破及应用领域的逐渐广泛化。医疗机器人作为人工智能时代在医疗领域应用的深化&#xff0c;能够有效帮助医生进行一系列的医疗诊断和辅助治疗&#xff0c;在有效缓解医疗资源紧张的问题下推动医疗信息化的发展。 智慧医疗场景应用 从应用场景来…

ctfshow-web入门-信息搜集(web11-web20)

目录 1、web11 2、web12 3、web13 4、web14 5、web15 6、web16 7、web17 8、web18 9、web19 10、web20 1、web11 域名其实也可以隐藏信息&#xff0c;比如flag.ctfshow.com 就隐藏了一条信息 查询域名的 DNS 记录&#xff0c;类型为 TXT&#xff08;域名的说明&#…