本发明涉及医学影像处理,特别是涉及一种基于神经网络的阿尔兹海默症分类模型构建方法及系统。
背景技术:
1、阿尔兹海默症(alzheimer's disease,ad)是一种不可逆转的进行性神经退行性疾病,约占目前所有痴呆病例的70%-80%。其表现为大脑记忆功能逐渐退化,认知功能逐步降低,语言表达能力出现障碍,甚至人格方面发生变化。晚期ad患者,往往个人生活不能自理,甚至不能识别出家人,最终记忆稳步恶化。轻度认知障碍(mild cognitiveimpairment,mci)是疾病发展并开始影响日常生活活动的阶段,患者会遇到言语困难、运动功能丧失、记忆问题以及读写困难。mci患者更容易患阿尔茨海默氏病,研究发现,从mci到ad的年转化率高达10%。ad是患者完全依赖看护人的最后阶段。尽管ad不是死亡的原因,但它会引发其他精神疾病,最终导致死亡。阿尔兹海默症目前尚无完全治愈的有效方法。
2、在过去,大多数ad的检测方法都依赖于临床观察,这主要靠临床医生的经验,而随着计算机辅助诊断(computer aided diagnosis,cad)的发展,神经影像学技术可以检测到ad患者大脑结构的细微变化。常用于检测ad的神经影像学方法有磁共振图像(magneticresonance imaging,mri)、计算机断层扫描(computed tomography,ct)、正电子发射断层显像(positron emission computed tomography,pet)等,但是这些技术仍然存在分类效果不佳等问题,尤其是在mci分类方面表现欠佳。
技术实现思路
1、为了克服现有的阿尔兹海默症检测方法存在的分类效果不佳等问题,尤其是在mci分类方面表现欠佳,本发明提供一种基于神经网络的阿尔兹海默症分类模型构建方法及系统,该方法及系统提供了完整的端到端的解决方案,从提取图像细节信息和空间结构信息的角度,利用3dresnet提取图像特征,充分提取和利用图像信息,提高模型的分类准确率。
2、为实现上述目的,本发明采取如下的技术方案:
3、一种基于神经网络的阿尔兹海默症分类模型构建方法,该方法包括以下步骤:
4、步骤1:从阿尔兹海默症神经影像学计划数据集获取结构核磁共振图像,并利用matlab软件对结构核磁共振图像进行预处理操作,所述预处理操作包括ac-pc连合操作和颅骨剥离操作,经过预处理操作后得到构建模型所需的全脑图像数据集;
5、步骤2:加载全脑图像数据集,并按照预设比例对全脑图像数据集进行划分,得到训练集、验证集和测试集;
6、步骤3:以3dresnet-50模型为基础,增加并行多尺度卷积模块和细节增强模块,并引入多尺度胶囊网络模型,构建得到改进3dresnet网络模型,模型构建过程包括以下步骤:
7、步骤3.1、导入库:在pytorch中导入需要使用的库,包括torch、torch.nn、torch.nn.functional;
8、步骤3.2、构建并行多尺度卷积模块:定义一个名为parallelmultiscaleconv的类,定义__init__()函数,接受三个参数:输入通道数in_channels、输出通道数out_channels、卷积核大小kernel_size;调用super(parallelmultiscaleconv, self).__init__()来调用父类nn.module的构造函数;对卷积核大小kernel_size进行多个尺度的定义:kernel_size_1、kernel_size_2、kernel_size_3,分别是原始卷积核大小kernel_size的两倍、三倍和四倍;使用nn.parameter创建四个可学习的参数weight1、weight2、weight3、weight4,这些参数用于对不同尺度下的特征进行加权处理;创建四个卷积层conv1、conv2、conv3、conv4,分别对应于不同尺度下的卷积操作;利用前向传播方法forward(self, x),接收一个输入张量x,然后分别对输入张量x进行四个不同尺度的卷积操作,并乘以对应的权重,将四个尺度下的卷积结果加权求和后输出;
9、步骤3.3、定义用于构建改进3dresnet网络模型主要组成部分的名为bottleneck的残差块:定义一个类属性expansion,该属性表示残差块中的特征图的通道数扩展倍数,在bottleneck结构中,第三个卷积层将输入特征图的通道数扩展为原始的4倍;定义__init__()函数,用于接受四个参数:输入通道数in_channels、输出通道数out_channels、步长stride、降采样函数downsample;调用super(bottleneck, self).__init__()来调用父类nn.module的构造函数,定义类属性stride,表示卷积操作的步长,创建三个卷积层conv1、conv2、conv3,分别进行1x1、3x3、1x1的卷积操作,用于提取特征;创建三个batchnormalization层,分别为bn1、bn2、bn3,用于规范化卷积层的输出,加速模型训练;创建激活函数relu和降采样函数downsample,降采样函数downsample用于在残差连接时执行降采样,以匹配维度;利用前向传播方法forward(self, x),将输入张量x赋值给residual变量,通过第一个卷积层conv1进行卷积操作,然后经过批归一化bn1和激活函数relu,接着通过第二个卷积层conv2进行卷积操作,再经过批归一化bn2和激活函数relu,最后通过第三个卷积层conv3进行卷积操作,再经过批归一化bn3,如果存在降采样函数downsample,则对输入张量x进行降采样,使其与卷积后的输出维度相匹配,再将卷积输出与残差residual相加,然后通过激活函数relu,最终返回残差块的输出;
10、步骤3.4、定义用于实现胶囊网络中胶囊结构的胶囊层:定义__init__()函数,接受多个参数,包括胶囊的数量num_capsules、路由节点的数量num_route_nodes、输入通道数in_channels、输出通道数out_channels、卷积核大小kernel_size、步长stride和迭代次数num_iterations;调用super(capsulelayer, self).__init__()来调用父类nn.module的构造函数,初始化胶囊层的参数,包括路由节点的数量num_route_nodes和迭代次数num_iterations,如果路由节点的数量num_route_nodes不为 -1,表示存在路由节点,此时初始化一个可学习的权重张量route_weights,用于路由计算,如果路由节点的数量num_route_nodes为 -1,表示不存在路由节点,此时创建一个包含多个卷积层的nn.modulelist,每个卷积层对应一个胶囊;定义一个激活函数squash,用于将向量长度压缩到0到1之间,并保持向量的方向信息,计算输入张量的平方范数,并在指定的维度上进行求和,计算压缩比例scale,将其应用到原始张量上,最后返回经过压缩后的张量;利用前向传播方法forward(self, x),如果存在路由节点,则执行动态路由算法的迭代过程,在每次迭代中,通过路由权重和输入张量计算先验概率priors,然后根据先验概率priors和动态更新的logit值计算输出向量,如果不存在路由节点,则对输入张量分别通过多个卷积层,并将输出连接起来,然后对连接后的张量应用胶囊激活函数,最终返回胶囊层的输出张量;
11、步骤3.5、定义细节增强模块:定义__init__()函数,接受三个参数:输入通道数in_channels、输出通道数out_channels和中间通道数inter_channels;创建三个卷积层self.g、self.theta和self.phi,分别用于计算查询、键和值;创建两个用于生成注意力掩码的卷积层self.conv_mask和self.conv_out,以及一个用于调整输出形状的全连接层;利用前向传播方法forward(self, x),获取输入张量x的形状信息,包括批量大小、通道数以及三维空间维度,分别通过三个卷积层计算查询张量theta_x、键张量phi_x和值张量g_x,对张量进行形状变换,计算查询张量theta_x和键张量phi_x之间的相似度矩阵,并通过softmax函数归一化,使用归一化的相似度矩阵计算查询张量theta_x和值张量g_x之间的加权和,得到细节信息,通过卷积层self.conv_mask生成注意力掩码,并通过sigmoid函数归一化,将输入张量x和注意力掩码相乘,最后通过卷积层self.conv_out进行输出特征的变换,并将其与输入张量x相加,最终得到细节增强模块的输出;
12、步骤3.6、定义一个改进3dresnet的类:定义__init__()函数,接受多个参数,包括残差块类型block、每个残差模块的残差块数量layers、输入通道数in_channels、图像尺寸image_size、输出通道数out_channels、残差连接类型shortcut_type、输出类别数量num_classes;初始化该网络的参数,创建第一个卷积层self.conv1为步骤3.2定义的并行多尺度卷积模块、批归一化和激活函数relu,添加用于下采样的最大池化层self.maxpool,创建多个胶囊层self.primary_capsules1、self.primary_capsules2、self.primary_capsules3和self.primary_capsules4,且每个胶囊层的通道数和卷积核大小都不同,这些胶囊层全部来自步骤3.4定义的胶囊层,用于提取空间结构信息;创建多个残差模块self.layer1、self.layer2、self.layer3和self.layer4,每个残差模块包含多个步骤3.3定义的bottleneck,创建多个细节增强模块self.de1、self.de2和self.de3,且各个细节增强模块的通道数不同,创建数字胶囊层digit_capsules和全局平均池化self.avgpool,创建用于分类的全连接层self.fc;定义_make_layer方法,用于构建残差模块,接受参数包括残差块类型block、输出通道数out_channels、残差模块中残差块的数量blocks、残差连接类型shortcut_type和步长stride,根据给定的参数构建残差模块;
13、步骤3.7、模型运行:定义用于改进3dresnet网络模型的forward函数,将输入张量x通过第一个卷积层self.conv1提取浅层特征,卷积输出通过批归一化层self.bn1进行归一化,归一化后的输出通过激活函数self.relu进行非线性变换,通过最大池化层self.maxpool进行池化操作,以降低特征维度;池化后的特征x输入到第一个胶囊层self.primary_capsules1中,以提取空间结构特征x1,池化后的特征x继续通过残差模块self.layer1进行残差块的处理,处理后的特征x输入到第一个细节增强模块self.de1中进行进一步处理,残差模块self.layer1处理后的特征x输入到第二个胶囊层self.primary_capsules2中,以提取空间结构特征x2,第一个细节增强模块self.de1处理后的特征x通过残差模块self.layer2进行残差块的处理,处理后的特征x输入到第二个细节增强模块self.de2中进行进一步处理,残差模块self.layer2处理后的特征x输入到第三个胶囊层self.primary_capsules3中,以提取空间结构特征x3,第二个细节增强模块self.de2处理后的特征x通过残差模块self.layer3进行残差块的处理,残差模块self.layer3处理后的特征x输入到第三个细节增强模块self.de3中进行进一步处理,处理后的特征x输入到第四个胶囊层self.primary_capsules4中,以提取全局特征x4,第三个细节增强模块self.de3处理后的特征x通过残差模块self.layer4进行残差块的处理;将提取的全局特征x1、x2、x3和x4拼接在一起得到特征张量x5,将特征张量x5输入到最后一个胶囊层self.digit_capsules中进行处理,获得胶囊输出特征x6,再对胶囊输出特征x6进行维度转换,将残差模块self.layer4输出的特征x通过平均池化层self.avgpool进行池化操作并展平为一维向量后,将展平后的特征x与维度转换后的x6进行拼接,最后将拼接后的特征输入到全连接层self.fc中进行分类,最终模型返回分类结果;
14、步骤4:对所述改进3dresnet网络模型进行训练与验证,最终得到阿尔兹海默症分类模型。
15、相应地,本发明还提供一种基于神经网络的阿尔兹海默症分类模型构建系统,该系统包括:
16、数据预处理单元,用于从阿尔兹海默症神经影像学计划数据集获取结构核磁共振图像,并利用matlab软件对结构核磁共振图像进行预处理操作,所述预处理操作包括ac-pc连合操作和颅骨剥离操作,经过预处理操作后得到构建模型所需的全脑图像数据集;
17、数据集加载及划分单元,用于加载全脑图像数据集,并按照预设比例对全脑图像数据集进行划分,得到训练集、验证集和测试集;
18、模型构建单元,用于以3dresnet-50模型为基础,增加并行多尺度卷积模块和细节增强模块,并引入多尺度胶囊网络模型,构建得到改进3dresnet网络模型,所述模型构建单元包括:
19、导入子单元,用于在pytorch中导入需要使用的库,包括torch、torch.nn、torch.nn.functional;
20、并行多尺度卷积子单元,用于构建并行多尺度卷积模块,所述并行多尺度卷积子单元定义一个名为parallelmultiscaleconv的类,定义__init__()函数,接受三个参数:输入通道数in_channels、输出通道数out_channels、卷积核大小kernel_size;调用super(parallelmultiscaleconv, self).__init__()来调用父类nn.module的构造函数;对卷积核大小kernel_size进行多个尺度的定义:kernel_size_1、kernel_size_2、kernel_size_3,分别是原始卷积核大小kernel_size的两倍、三倍和四倍;使用nn.parameter创建四个可学习的参数weight1、weight2、weight3、weight4,这些参数用于对不同尺度下的特征进行加权处理;创建四个卷积层conv1、conv2、conv3、conv4,分别对应于不同尺度下的卷积操作;利用前向传播方法forward(self, x),接收一个输入张量x,然后分别对输入张量x进行四个不同尺度的卷积操作,并乘以对应的权重,将四个尺度下的卷积结果加权求和后输出;
21、残差块子单元,用于定义构建改进3dresnet网络模型主要组成部分的名为bottleneck的残差块,所述残差块子单元定义一个类属性expansion,该属性表示残差块中的特征图的通道数扩展倍数,在bottleneck结构中,第三个卷积层将输入特征图的通道数扩展为原始的4倍;定义__init__()函数,用于接受四个参数:输入通道数in_channels、输出通道数out_channels、步长stride、降采样函数downsample;调用super(bottleneck,self).__init__()来调用父类nn.module的构造函数,定义类属性stride,表示卷积操作的步长,创建三个卷积层conv1、conv2、conv3,分别进行1x1、3x3、1x1的卷积操作,用于提取特征;创建三个batch normalization层,分别为bn1、bn2、bn3,用于规范化卷积层的输出,加速模型训练;创建激活函数relu,降采样函数downsample用于在残差连接时执行降采样,以匹配维度;利用前向传播方法forward(self, x),将输入张量x赋值给residual变量,通过第一个卷积层conv1进行卷积操作,然后经过批归一化bn1和激活函数relu,接着通过第二个卷积层conv2进行卷积操作,再经过批归一化bn2和激活函数relu,最后通过第三个卷积层conv3进行卷积操作,再经过批归一化bn3,如果存在降采样函数downsample,则对输入张量x进行降采样,使其与卷积后的输出维度相匹配,再将卷积输出与残差residual相加,然后通过激活函数relu,最终返回残差块的输出;
22、胶囊层子单元,用于定义实现胶囊网络中胶囊结构的胶囊层,所述胶囊层子单元定义__init__()函数,接受多个参数,包括胶囊的数量num_capsules、路由节点的数量num_route_nodes、输入通道数in_channels、输出通道数out_channels、卷积核大小kernel_size、步长stride和迭代次数num_iterations;调用super(capsulelayer,self).__init__()来调用父类nn.module的构造函数,初始化胶囊层的参数,包括路由节点的数量num_route_nodes和迭代次数num_iterations,如果路由节点的数量num_route_nodes不为 -1,表示存在路由节点,此时初始化一个可学习的权重张量route_weights,用于路由计算,如果路由节点的数量num_route_nodes为 -1,表示不存在路由节点,此时创建一个包含多个卷积层的nn.modulelist,每个卷积层对应一个胶囊;定义一个激活函数squash,用于将向量长度压缩到0到1之间,并保持向量的方向信息,计算输入张量的平方范数,并在指定的维度上进行求和,计算压缩比例scale,将其应用到原始张量上,最后返回经过压缩后的张量;利用前向传播方法forward(self, x),如果存在路由节点,则执行动态路由算法的迭代过程,在每次迭代中,通过路由权重和输入张量计算先验概率priors,然后根据先验概率priors和动态更新的logit值计算输出向量,如果不存在路由节点,则对输入张量分别通过多个卷积层,并将输出连接起来,然后对连接后的张量应用胶囊激活函数,最终返回胶囊层的输出张量;
23、细节增强子单元,用于定义细节增强模块,所述细节增强子单元定义__init__()函数,接受三个参数:输入通道数in_channels、输出通道数out_channels和中间通道数inter_channels;创建三个卷积层self.g、self.theta和self.phi,分别用于计算查询、键和值;创建两个用于生成注意力掩码的卷积层self.conv_mask和self.conv_out,以及一个用于调整输出形状的全连接层;利用前向传播方法forward(self, x),获取输入张量x的形状信息,包括批量大小、通道数以及三维空间维度,分别通过三个卷积层计算查询张量theta_x、键张量phi_x和值张量g_x,对张量进行形状变换,计算查询张量theta_x和键张量phi_x之间的相似度矩阵,并通过softmax函数归一化,使用归一化的相似度矩阵计算查询张量theta_x和值张量g_x之间的加权和,得到细节信息,通过卷积层self.conv_mask生成注意力掩码,并通过sigmoid函数归一化,将输入张量x和注意力掩码相乘,最后通过卷积层self.conv_out进行输出特征的变换,并将其与输入张量x相加,最终得到细节增强模块的输出;
24、类定义子单元,用于定义一个改进3dresnet的类,所述类定义子单元定义__init__()函数,接受多个参数,包括残差块类型block、每个残差模块的残差块数量layers、输入通道数in_channels、图像尺寸image_size、输出通道数out_channels、残差连接类型shortcut_type、输出类别数量num_classes;初始化该网络的参数,创建第一个卷积层self.conv1为并行多尺度卷积子单元定义的并行多尺度卷积模块、批归一化和激活函数relu,添加用于下采样的最大池化层self.maxpool,创建多个胶囊层self.primary_capsules1、self.primary_capsules2、self.primary_capsules3和self.primary_capsules4,且每个胶囊层的通道数和卷积核大小都不同,这些胶囊层全部来自胶囊层子单元定义的胶囊层,用于提取空间结构信息;创建多个残差模块self.layer1、self.layer2、self.layer3和self.layer4,每个残差模块包含多个残差块子单元定义的bottleneck,创建多个细节增强模块self.de1、self.de2和self.de3,且各个细节增强模块的通道数不同,创建数字胶囊层digit_capsules和全局平均池化self.avgpool,创建用于分类的全连接层self.fc;定义_make_layer方法,用于构建残差模块,接受参数包括残差块类型block、输出通道数out_channels、残差模块中残差块的数量blocks、残差连接类型shortcut_type和步长stride,根据给定的参数构建残差模块;
25、模型运行子单元,用于定义改进3dresnet网络模型的forward函数,将输入张量x通过第一个卷积层self.conv1提取浅层特征,卷积输出通过批归一化层self.bn1进行归一化,归一化后的输出通过激活函数self.relu进行非线性变换,通过最大池化层self.maxpool进行池化操作,以降低特征维度;池化后的特征x输入到第一个胶囊层self.primary_capsules1中,以提取空间结构特征x1,池化后的特征x继续通过残差模块self.layer1进行残差块的处理,处理后的特征x输入到第一个细节增强模块self.de1中进行进一步处理,残差模块self.layer1处理后的特征x输入到第二个胶囊层self.primary_capsules2中,以提取空间结构特征x2,第一个细节增强模块self.de1处理后的特征x通过残差模块self.layer2进行残差块的处理,处理后的特征x输入到第二个细节增强模块self.de2中进行进一步处理,残差模块self.layer2处理后的特征x输入到第三个胶囊层self.primary_capsules3中,以提取空间结构特征x3,第二个细节增强模块self.de2处理后的特征x通过残差模块self.layer3进行残差块的处理,残差模块self.layer3处理后的特征x输入到第三个细节增强模块self.de3中进行进一步处理,处理后的特征x输入到第四个胶囊层self.primary_capsules4中,以提取全局特征x4,第三个细节增强模块self.de3处理后的特征x通过残差模块self.layer4进行残差块的处理;将提取的全局特征x1、x2、x3和x4拼接在一起得到特征张量x5,将特征张量x5输入到最后一个胶囊层self.digit_capsules中进行处理,获得胶囊输出特征x6,再对胶囊输出特征x6进行维度转换,将残差模块self.layer4输出的特征x通过平均池化层self.avgpool进行池化操作并展平为一维向量后,将展平后的特征x与维度转换后的x6进行拼接,最后将拼接后的特征输入到全连接层self.fc中进行分类,最终模型返回分类结果;
26、训练与验证单元,用于对所述改进3dresnet网络模型进行训练与验证,得到最终的阿尔兹海默症分类模型。
27、本发明还提出一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上所述方法的步骤。
28、与现有技术相比,本发明具有以下有益效果:
29、本发明所提出的基于神经网络的阿尔兹海默症分类模型构建方法及系统,首先采用标准的预处理方法,对原图像进行处理,然后将得到的处理后的全脑图像用于构建的改进3dresnet网络模型的训练与验证,最终得到阿尔兹海默症分类模型,其中构建的改进3dresnet网络模型包括一个并行多尺度卷积模块、改进的3dresnet-50模型和胶囊网络,使用并行多尺度卷积模块获得图像的浅层特征,通过改进的3dresnet-50模型获取图像的细节信息,再使用胶囊网络提取图像的空间结构信息,最后将得到的细节信息和空间结构信息进行特征融合并分类,在充分利用图像信息的同时提高了模型的分类性能。
1.一种基于神经网络的阿尔兹海默症分类模型构建方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种基于神经网络的阿尔兹海默症分类模型构建方法,其特征在于,利用matlab软件对结构核磁共振图像进行预处理操作的过程包括以下步骤:
3.根据权利要求1所述的一种基于神经网络的阿尔兹海默症分类模型构建方法,其特征在于,步骤2包括以下步骤:
4.根据权利要求3所述的一种基于神经网络的阿尔兹海默症分类模型构建方法,其特征在于,所述预设比例为训练集、验证集和测试集之比为8:1:1。
5.根据权利要求1所述的一种基于神经网络的阿尔兹海默症分类模型构建方法,其特征在于,步骤4包括以下步骤:
6.根据权利要求5所述的一种基于神经网络的阿尔兹海默症分类模型构建方法,其特征在于,利用torch.nn.functional.softmax函数将模型输出的概率值进行softmax处理,并提取出正类的概率作为预测概率,将记录的真实标签和预测概率数据移回cpu,并转换为numpy数组,使用extend方法将numpy数组添加到预先定义好的列表中,然后计算混淆矩阵的各项指标,用于评估模型在二分类任务中的表现,并在每个训练周期结束后打印包括验证损失和准确率在内的评价指标的信息。
7.根据权利要求5或6所述的一种基于神经网络的阿尔兹海默症分类模型构建方法,其特征在于,用于评估模型在二分类任务中的表现的评估指标包括准确率、特异度和auc。
8.根据权利要求1所述的一种基于神经网络的阿尔兹海默症分类模型构建方法,其特征在于,选择的设备为gpu。
9.一种基于神经网络的阿尔兹海默症分类模型构建系统,其特征在于,包括:
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述方法的步骤。