当前位置:   article > 正文

基于深度学习的脑部肿瘤检测系统

基于深度学习的脑部肿瘤检测系统

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

1. 项目简介

        当大脑中形成异常细胞时,就会发生脑肿瘤。肿瘤主要有两种类型:癌性(恶性)肿瘤和良性肿瘤。恶性肿瘤可分为原发性肿瘤和继发性肿瘤,前者始于大脑,后者从其他地方扩散,称为脑转移瘤。所有类型的脑肿瘤都可能产生不同的症状,这取决于所涉及的大脑部分。这些症状可能包括头痛、癫痫发作、视力问题、呕吐和精神变化。头痛通常在早上更严重,并伴随呕吐而消失。其他症状可能包括走路、说话或感觉困难。随着疾病的发展,可能会出现无意识状态。

        本项目利用 TensorFlow、Keras 等深度学习工具包构建 VGG16、RestNet、InceptionV3 等神经网络,实现对脑部肿瘤 MRI 扫描影像的识别。首先在 Jupyter Notebook 平台实现模型的训练、验证和存储,利用 Flask + Bootrap + Ajax 搭建交互式分析框架,实现脑部 MRI 扫描影像上传和在线预测,模型给出是否包含脑部肿瘤及肿瘤类型,整体准确率达到93.9%

        B站详情及代码下载:基于深度学习的脑部肿瘤检测系统_哔哩哔哩_bilibili

基于深度学习的脑部肿瘤检测系统

2. 脑部肿瘤MRI扫描数据读取

        利用 ImageDataGenerator 从文件夹中加载脑部肿瘤MRI扫描图像数据,并利用图像的旋转、放大、剪切、对调等方式,实现对图像数据集的扩充。

  1. data_dir = 'dataset'
  2. class_map = {'无肿瘤': 0, '胶质瘤': 1, '垂体瘤': 2, '脑膜瘤': 3}
  3. class_name_dict = {0: '无肿瘤', 1: '胶质瘤', 2: '垂体瘤', 3: '脑膜瘤'}
  4. def image_generator(height,width):
  5. datagen = ImageDataGenerator(
  6. rescale=1./255.,
  7. validation_split=0.2,
  8. rotation_range=10,
  9. width_shift_range=0.05,
  10. height_shift_range=0.05,
  11. # shear_range=0.05,
  12. brightness_range=[0.5, 1.5],
  13. )
  14. train_ds = datagen.flow_from_directory(
  15. data_dir,
  16. batch_size=batch_size,
  17. subset="training",
  18. #color_mode = 'grayscale',
  19. shuffle=True,
  20. class_mode='categorical',
  21. target_size=(height, width),
  22. classes=class_map
  23. )
  24. val_ds = datagen.flow_from_directory(
  25. data_dir,
  26. subset="validation",
  27. #seed=123,
  28. #color_mode = 'grayscale',
  29. class_mode='categorical',
  30. target_size=(height, width),
  31. batch_size=batch_size,
  32. classes=class_map
  33. )
  34. return train_ds, val_ds
  35. train_ds, val_ds = image_generator(height,width)

        数据集样例数据可视化:

3. 基于迁移学习的脑部肿瘤检测

3.1  VGG16 Base Model

        VGG(Visual Geometry Group)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG19最为著名。

        VGG16和VGG19网络架构非常相似,都由多个卷积层和池化层交替堆叠而成,最后使用全连接层进行分类。两者的区别在于网络的深度和参数量,VGG19相对于VGG16增加了3个卷积层和一个全连接层,参数量也更多。

        VGG网络被广泛应用于图像分类、目标检测、语义分割等计算机视觉任务中,并且其网络结构的简单性和易实现性使得VGG成为了深度学习领域的经典模型之一。

        利用 TensorFlow、Keras 深度学习工具包,构建基于 VGG16 基础 Base 模型的卷积神经网络:

  1. input_shape = (height, width, 3)
  2. base_model = tf.keras.applications.vgg16.VGG16(
  3. weights='./pretrained_models/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5',
  4. include_top=False,
  5. input_shape=input_shape
  6. )
  7. base_model.trainable = False
  8. model_vgg16 = tf.keras.Sequential()
  9. model_vgg16.add(base_model)
  10. model_vgg16.add(tf.keras.layers.Flatten())
  11. model_vgg16.add(tf.keras.layers.Dense(4, activation='softmax'))
  12. model_vgg16.compile(loss='categorical_crossentropy',
  13. optimizer=tf.keras.optimizers.Adam(0.001),
  14. metrics=['acc'])
  15. model_vgg16.summary()

        模型训练:

Epoch 1/25
88/88 [==============================] - ETA: 0s - loss: 0.6459 - acc: 0.7654
Epoch 1: acc improved from -inf to 0.76544, saving model to save_models\vgg16_best.h5
88/88 [==============================] - 789s 9s/step - loss: 0.6459 - acc: 0.7654 - val_loss: 0.4368 - val_acc: 0.8355

......

Epoch 25: acc improved from 0.98754 to 0.98950, saving model to save_models\vgg16_best.h5
88/88 [==============================] - 1244s 14s/step - loss: 0.0384 - acc: 0.9895 - val_loss: 0.1704 - val_acc: 0.9338

        训练 Loss 和 Acc 结果可视化:

        模型评估:

  1. train_result = model_vgg16.evaluate(train_ds)
  2. val_result = model_vgg16.evaluate(val_ds)
  3. vgg16_eval_result = pd.DataFrame(zip(train_result,val_result),columns=['Train','Val'],index=['Loss','Acc'])
  4. ypred_val = model_vgg16.predict(val_ds[0][0])
  5. ypred_val = np.argmax(ypred_val, axis=1)
  6. true_val = np.argmax(val_ds[0][-1], axis=1)
  7. print("混淆矩阵:")
  8. print(confusion_matrix(true_val, ypred_val))
  9. print("详细评估指标:")
  10. print('\n',classification_report(ypred_val, true_val))
TrainVal
Loss0.0619260.161204
Acc0.9754400.939459

3.2 InceptionV3 Base Model

        深度神经网络(Deep Neural Networks, DNN)或深度卷积网络中的Inception模块是由Google的Christian Szegedy等人提出,包括Inception-v1、Inception-v2、Inception-v3、Inception-v4及Inception-ResNet系列。

参考文章:经典神经网络 | 从Inception v1到Inception v4全解析

        以 InceptionV3 为 Base model 构建脑部肿瘤识别模型

        模型训练:

  1. checkpoint = tf.keras.callbacks.ModelCheckpoint('save_models/inceptionv3_best.h5', monitor='acc', verbose=1, mode='max',save_best_only=True)
  2. early = tf.keras.callbacks.EarlyStopping(monitor="acc", mode="max",restore_best_weights=True, patience=5)
  3. callbacks_list = [checkpoint,early]
  4. history = model_inceptionv3.fit(
  5. train_ds,
  6. validation_data=val_ds,
  7. epochs=25,
  8. shuffle=True,
  9. verbose=True,
  10. callbacks=callbacks_list)

        可以看出,InceptionV3模型训练的验证集 Loss 与准确率变化曲线抖动较大,性能不是很稳定。

        模型评估:

TrainVal
Loss0.6382191.358395
Acc0.9248980.888889

3.3 模型性能对比

  1. labels = ['LOSS', 'ACC']
  2. vgg16_evals = [vgg16_eval_result['Loss'], vgg16_eval_result['Acc']]
  3. inceptionv3_evals = [inceptionv3_eval_result['Loss'], inceptionv3_eval_result['Acc']]
  4. x = np.arange(len(labels)) # the label locations
  5. width = 0.35 # the width of the bars
  6. fig, ax = plt.subplots(figsize=(8, 6), dpi=100)
  7. rects1 = ax.bar(x - width/2, vgg16_evals, width, label='VGG16')
  8. rects2 = ax.bar(x + width/2, inceptionv3_evals, width, label='Inception-V3')
  9. # Add some text for labels, title and custom x-axis tick labels, etc.
  10. ax.set_ylabel('Loss/Acc')
  11. ax.set_title('VGG16 与 Inception-V3 的脑部肿瘤检测性能对比')
  12. ax.set_xticks(x, labels)
  13. ax.legend()
  14. ax.bar_label(rects1, padding=3)
  15. ax.bar_label(rects2, padding=3)
  16. fig.tight_layout()
  17. plt.show()

        可以看出,在脑部肿瘤检测任务上,VGG16 的性能相比 Inception-V3 的预测准确率较高,性能较好,但预测推理时间较长,时效性不如 Inception-V3。

4. 基于深度学习的脑部肿瘤检测系统

4.1 首页简介与注册登录

4.2 脑部肿瘤在线检测

        通过上传待测试脑部MRI扫描影像,选择预测模型 VGG16 或 Inception-V3 不同模型,点击提交预测,后台模型加载图像,进行预测,给出是否包含脑部肿瘤及肿瘤类型:

5. 总结

        本项目利用 TensorFlow、Keras 等深度学习工具包构建 VGG16、RestNet、InceptionV3 等神经网络,实现对脑部肿瘤 MRI 扫描影像的识别。首先在 Jupyter Notebook 平台实现模型的训练、验证和存储,利用 Flask + Bootrap + Ajax 搭建交互式分析框架,实现脑部 MRI 扫描影像上传和在线预测,模型给出是否包含脑部肿瘤及肿瘤类型,整体准确率达到93.9%。

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

精彩专栏推荐订阅:

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/505854
推荐阅读
相关标签
  

闽ICP备14008679号