基于LIDC-IDRI肺结节肺癌数据集的人工智能深度学习分类良性和恶性肺癌(Python 全代码)全流程解析(二)

这篇具有很好参考价值的文章主要介绍了基于LIDC-IDRI肺结节肺癌数据集的人工智能深度学习分类良性和恶性肺癌(Python 全代码)全流程解析(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一部分内容的传送门

1 环境配置和数据集预处理

1.1 环境配置

环境配置建议使用anaconda进行配置。核心的配置是keras和tensorflow的版本要匹配。
环境配置如下:
tensorboard 1.13.1
tensorflow 1.13.1
Keras 2.2.4
numpy 1.21.5
opencv-python 4.6.0.66
python 3.7

1.1 数据集预处理

数据集的预处理分为两个关键步骤。首先是图片处理,我们使用cv2库将图片转换为矩阵格式。这些矩阵随后被堆叠,并放入一个列表中,以便于深度学习模型的读取和处理。

其次是标签处理。我们从保存肺癌恶性程度信息的label.csv文件中逐行读取数据。通过切片和提取,我们获取了肺癌的恶性程度评级,这些评级在1到5之间。我们将大于3的评级归类为恶性,小于3的评级归类为良性。为了让模型更好地理解这些标签,我们用1表示良性,0表示恶性,最后将标签数据转换为one-hot编码格式。

输出与处理的函数如下:

import matplotlib.pyplot as plt
import numpy as np
import keras
import cv2
import os
from keras.preprocessing.image import img_to_array
from keras.utils import to_categorical, plot_model

def load_data(label_path,data_path):
    data_x = []
    labels = []
    f = open(label_path)
    label = f.readlines()
    for Pathimg in os.listdir(os.path.join(data_path,'x')):
        Path    = os.path.join(os.path.join(data_path,'x'),Pathimg)
        #print(Path)
        image = cv2.imread(Path)
        image = img_to_array(image)
        data_x.append(image)
        
        #处理label
        index_num = int(Pathimg.split('.')[0])
      #  print(labels)用索隐处理,
        a         = label[index_num]
        label_     = int(a[-3:-2])
        label_1 = 1 if label_ > 3 else 0
        labels.append(label_1)
        print(labels)
       # print(data)
    #guiyihua
    data_x = np.array(data_x,dtype='float') / 255.0
    labels = np.array(labels) 
    #转化标签为张量
    labels = to_categorical(labels)

    #载入data——y
    data_y = []
    for Pathimg in os.listdir(os.path.join(data_path,'y')):
        Path    = os.path.join(os.path.join(data_path,'y'),Pathimg)
        #print(Path)
        image = cv2.imread(Path)
        image = img_to_array(image)
        data_y.append(image)
    #guiyihua
    data_y = np.array(data_y,dtype='float') / 255.0
    
    #处理Z
    data_z = []
    for Pathimg in os.listdir(os.path.join(data_path,'z')):
        Path    = os.path.join(os.path.join(data_path,'z'),Pathimg)
        #print(Path)
        image = cv2.imread(Path)
        image = img_to_array(image)
        data_z.append(image)
    #guiyihua
    data_z = np.array(data_y,dtype='float') / 255.0
    return labels,data_x,data_y,data_z

我们定义好数据预处理的函数后读取数据。图片的数据的格式如下:
其中有875个图片,每个图片的大小为50*50和3个通道
lidc-idri unet,医学图像处理+机器学习,keras,深度学习,图像处理,python
label的格式如下:
lidc-idri unet,医学图像处理+机器学习,keras,深度学习,图像处理,python

2 深度学习模型训练和评估

2.1 深度学习模型训练

我们已经在另一个文件中创建了一个深度学习模型,并且定义了一个函数来导入这个模型。在这里,我们将实例化这个函数。该函数会返回模型的结构以及模型训练的记录信息。

这个模型的输入是来自三个不同角度的图像和对应的标签。模型将被训练 5 个周期,每个周期训练 50 个图像。我们将使用 TensorBoard 查看模型的训练记录。

######
#搭建模型
model,callbacks = create_model()
#模型训练
H = model.fit([data_x,data_y,data_z],[labels],
              epochs=5,batch_size=50, callbacks=callbacks)

训练结果如下:
我们可以看到训练的准确率还可以为0.7451左右
lidc-idri unet,医学图像处理+机器学习,keras,深度学习,图像处理,python

训练完成后我们将模型储存起来方便对模型进行评估。

######
#save model to disk
print('info:saving model.....')
model.save(os.path.join(result_path,'model_44.h5'))

2.1 深度学习模型评估

模型的评估我们首先使用了,分类模型训练的损失函数和准确率来评估模型的训练过程。之后我们还会介绍模型的评估的其他指标。包括混淆矩阵,ROC曲线,AUC值,等

#准确率损失曲线绘制
plt.style.use('ggplot')
plt.figure()
N = 5
fig =  plt.plot(np.arange(0, N), H.history["loss"], label="train_loss")
#plt.plot(np.arange(0, N), H.history["val_loss"], label="val_loss")
plt.plot(np.arange(0, N), H.history["acc"], label="train_acc")
#plt.plot(np.arange(0, N), H.history["val_acc"], label="val_acc")
plt.title("Training Loss and Accuracy on traffic-sign classifier")
plt.xlabel("Epoch #")
plt.ylabel("Loss/Accuracy")
plt.legend(loc="lower left")
#plt.show()
plt.savefig('a.jpg',dpi=800)

训练结果如下:
lidc-idri unet,医学图像处理+机器学习,keras,深度学习,图像处理,python

笑话一则开心一下喽

今天去买水果,我问一个摊主:别人家的瓜都写着不甜包退,你怎么不敢写呢,瓜不好吧。摊主:不买滚,我他么卖的是苦瓜……

深度学习,医学图像处理,机器学习精通,需要帮助的联系我(有偿哦)文章来源地址https://www.toymoban.com/news/detail-861846.html

完整代码如下:

import matplotlib.pyplot as plt
import numpy as np
import keras
import cv2
import os

os.chdir('F:\工作\博客\sort_lung')
from models import create_model
from load_datas import load_data

label_path = r'F:\test\data\label.txt'
data_path  = r'F:\test\data\train'
result_path  = r'F:\test\result'

#读取预处理数据
labels,data_x,data_y,data_z = load_data(label_path,data_path)

######
#搭建模型
model,callbacks = create_model()
#模型训练
H = model.fit([data_x,data_y,data_z],[labels],
              epochs=5,batch_size=50, callbacks=callbacks)

#save model to disk
print('info:saving model.....')
model.save(os.path.join(result_path,'model_44.h5'))

#准确率损失曲线绘制
plt.style.use('ggplot')
plt.figure()
N = 5
fig =  plt.plot(np.arange(0, N), H.history["loss"], label="train_loss")
#plt.plot(np.arange(0, N), H.history["val_loss"], label="val_loss")
plt.plot(np.arange(0, N), H.history["acc"], label="train_acc")
#plt.plot(np.arange(0, N), H.history["val_acc"], label="val_acc")
plt.title("Training Loss and Accuracy on traffic-sign classifier")
plt.xlabel("Epoch #")
plt.ylabel("Loss/Accuracy")
plt.legend(loc="lower left")
#plt.show()
plt.savefig('a.jpg',dpi=800)

模型文件如下

深度学习模型讲解—待续

# -*- coding: utf-8 -*-
"""
Created on Sun Apr 14 21:08:01 2024

@author: dell
"""

from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import Adam
from sklearn.model_selection import train_test_split
from keras.preprocessing.image import img_to_array
from keras.utils import to_categorical, plot_model
from keras.models import Model
#from imutils import paths
import matplotlib.pyplot as plt
import numpy as np
import keras
import cv2
import os

#定义模型
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense, Input,Concatenate


def create_model():
    model = Sequential()
    #############定义多输入
    input1  = Input(shape=(50,50,3),name = 'input1')
    input2  = Input(shape=(50,50,3),name = 'input2')
    input3  = Input(shape=(50,50,3),name = 'input3')
    
    #############定义多输入
    x1 = Conv2D(32, (3, 3),padding='same' )(input1)#input is height,width,deep
    x1 = Activation('relu')(x1)
    x1 = Conv2D(32, (3, 3),padding='same')(x1)
    x1 = Activation('relu')(x1)
    x1 = MaxPooling2D(pool_size=(2, 2),strides = (2, 2))(x1)
    x1 = Conv2D(48, (3, 3),padding='same')(x1)
    x1 = Activation('relu')(x1)
    x1 = Conv2D(48, (3, 3),padding='same')(x1)
    x1 = Activation('relu')(x1)
    x1 = MaxPooling2D(pool_size=(2, 2),strides = (2, 2))(x1)
    x1 = Conv2D(64, (3, 3),padding='same')(x1)
    x1 = Activation('relu')(x1)
    x1 = Conv2D(64, (3, 3),padding='same')(x1)
    x1 = Activation('relu')(x1)
    x1 = MaxPooling2D(pool_size=(2, 2),strides = (2, 2))(x1)
    # the model so far outputs 3D feature maps (height, width, features)
    #base_model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
    x1 = Flatten()(x1)
    x1 = Dense(256)(x1)
    x1 = Activation('relu')(x1)
    x1 = Dropout(0.5)(x1)
    category_predict1 = Dense(100, activation='softmax', name='category_predict1')(x1)
    # Three loss functions#定义三个全连接层
    
    
    x2 = Conv2D(32, (3, 3),padding='same' )(input2)#input is height,width,deep
    x2 = Activation('relu')(x2)
    x2 = Conv2D(32, (3, 3),padding='same')(x2)
    x2 = Activation('relu')(x2)
    x2 = MaxPooling2D(pool_size=(2, 2),strides = (2, 2))(x2)
    x2 = Conv2D(48, (3, 3),padding='same')(x2)
    x2 = Activation('relu')(x2)
    x2 = Conv2D(48, (3, 3),padding='same')(x2)
    x2 = Activation('relu')(x2)
    x2 = MaxPooling2D(pool_size=(2, 2),strides = (2, 2))(x2)
    x2 = Conv2D(64, (3, 3),padding='same')(x2)
    x2 = Activation('relu')(x2)
    x2 = Conv2D(64, (3, 3),padding='same')(x2)
    x2 = Activation('relu')(x2)
    x2 = MaxPooling2D(pool_size=(2, 2),strides = (2, 2))(x2)
    # the model so far outputs 3D feature maps (height, width, features)
    #base_model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
    x2 = Flatten()(x2)
    x2 = Dense(256)(x2)
    x2 = Activation('relu')(x2)
    x2 = Dropout(0.5)(x2)
    category_predict2 = Dense(100, activation='relu', name='category_predict2')(x2)
    
    
    x3 = Conv2D(32, (3, 3),padding='same' )(input3)#input is height,width,deep
    x3 = Activation('relu')(x3)
    x3 = Conv2D(32, (3, 3),padding='same')(x3)
    x3 = Activation('relu')(x3)
    x3 = MaxPooling2D(pool_size=(2, 2),strides = (2, 2))(x3)
    x3 = Conv2D(48, (3, 3),padding='same')(x3)
    x3 = Activation('relu')(x3)
    x3 = Conv2D(48, (3, 3),padding='same')(x3)
    x3 = Activation('relu')(x3)
    x3 = MaxPooling2D(pool_size=(2, 2),strides = (2, 2))(x3)
    x3 = Conv2D(64, (3, 3),padding='same')(x3)
    x3 = Activation('relu')(x3)
    x3 = Conv2D(64, (3, 3),padding='same')(x3)
    x3 = Activation('relu')(x3)
    x3 = MaxPooling2D(pool_size=(2, 2),strides = (2, 2))(x3)
    # the model so far outputs 3D feature maps (height, width, features)
    #base_model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
    x3 = Flatten()(x3)
    x3 = Dense(256)(x3)
    x3 = Activation('relu')(x3)
    x3 = Dropout(0.5)(x3)
    category_predict3 = Dense(100, activation='relu', name='category_predict3')(x3)
    
    #融合全连接层
    merge = Concatenate()([category_predict1,category_predict2,category_predict3])
    #定义输出
    output = Dense(2,activation='sigmoid', name='output')(merge)
    
    model = Model(inputs=[input1, input2, input3], outputs=[output])
    

    callbacks = [keras.callbacks.TensorBoard(
                          log_dir='my_log_dir',
                          )]
    
    model.compile(optimizer=Adam(lr=0.001,decay=0.01),
                  loss='binary_crossentropy',  
                  metrics=['accuracy'],
                  )
    
    return model,callbacks
    
    
    
    
    

到了这里,关于基于LIDC-IDRI肺结节肺癌数据集的人工智能深度学习分类良性和恶性肺癌(Python 全代码)全流程解析(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于kaggle数据集的猫狗识别(超详细版本)

    kaggle猫狗识别数据集共包含25000张JPEG数据集照片,其中猫和狗的照片各占12500张。数据集大小经过压缩打包后占543MB。 数据集可以从kaggle官方网站下载,链接如下: 如果嫌官网下载麻烦,也可以从博主之前分享的百度网盘链接中直接获取: 网盘分享—博客链接,点击 在下载

    2024年01月21日
    浏览(80)
  • 基于TensorFlow和Keras的狗猫数据集的分类实验

    解释什么是overfit(过拟合)? 简单理解就是训练样本得到的输出和期望输出过于一致,而测试样本输出与期望输出相差却很大。为了得到一致假设而使假设变得过度复杂称为过拟合。想像某种学习算法产生了一个过拟合的分类器,这个分类器能够百分之百的正确分类样本数据

    2024年02月12日
    浏览(39)
  • 【项目实战】三维重建:基于RGB-D数据集的TSDF算法

    主要流程: 计算每个体素在深度图像中的TSDF值,然后基于前一个体素的TSDF值更新后一个(加权平均),最后得到所有体素的结果,拼接为3D模型。 TSDF需要非常大的显存空间,GPU需要大概 2KB 存储单个体素的所有信息。因此, 只适用于小场景下的三维重建(如室内环境)。

    2024年02月12日
    浏览(66)
  • 基于DEAP数据集的四种机器学习方法的情绪分类

            在机器学习领域,KNN(K-Nearest Neighbors)、SVM(Support Vector Machine)、决策树(Decision Tree)和随机森林(Random Forest)是常见且广泛应用的算法。 1. KNN(K-Nearest Neighbors,K近邻) KNN算法是一种基本的分类和回归方法。对于分类任务,它基于特征空间中最接近的k个邻居

    2024年04月27日
    浏览(48)
  • 【深度学习】肺结节分割项目实战一:处理数据集

    主要参考此教程完成的实验 官方网站 肺图像数据库协会的图像收集(LIDC-IDRI)包括 诊断 和 带有病变注释标记的肺癌筛查胸部CT 。这是一个网络公开的国际资源,用于肺癌检测和诊断的计算机辅助诊断(CAD)方法的开发、培训和评估。 数据集包含1018个病例,每个病例包括来自临

    2024年02月05日
    浏览(87)
  • 【Pytorch】新手入门:基于sklearn实现鸢尾花数据集的加载

    【Pytorch】新手入门:基于sklearn实现鸢尾花数据集的加载 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享更多关于深度学

    2024年03月11日
    浏览(48)
  • (论文加源码)基于deap数据集的transformer结合注意力机制脑电情绪识别

    本篇论文是2021年新发表的一篇论文。也是目前有源码的论文中唯一一篇使用transformer模型和注意力机制的论文源码(pytorch和tensorflow版本均有) 论文及源码见个人主页: https://download.csdn.net/download/qq_45874683/87658878 (论文加源码)基于deap数据集的transformer结合注意力机制脑电情

    2024年02月12日
    浏览(41)
  • 机器学习:基于逻辑回归和高斯贝叶斯对人口普查数据集的分类与预测

    机器学习:基于逻辑回归和高斯贝叶斯对人口普查数据集的分类与预测 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据

    2023年04月08日
    浏览(42)
  • 基于OpenPCDet实现自定义数据集的训练,狸花猫看完要打拳系列(一)!

      最近在学习如何基于 OpenPCDet框架进行PointPillars网络训练 ,由于对框架以及完整训练过程都不了解,因此打算记录下自己的学习过程,感谢学习过程中狸花猫sensei的大力支持,目标是实现自定义数据集(因为笔者 只有激光雷达的数据,仿照kitti格式进行标注 )的训练,然后

    2024年02月09日
    浏览(40)
  • PyTorch: 基于【MobileNet V2】处理MNIST数据集的图像分类任务【准确率99%+】

    PyTorch: 基于【VGG16】处理MNIST数据集的图像分类任务【准确率98.9%+】 在深度学习和计算机视觉的世界里,MNIST数据集就像一颗璀璨的明珠,被广大研究者们珍视并广泛使用。这个数据集包含了大量的手写数字图像,为图像分类任务提供了丰富的素材。今天,我们将带您一同探索

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包