医学成像中的深度学习——基于PyTorch的3D 医学图像分割

2023-10-29

深度学习和医学成像

计算机视觉领域深度网络的兴起为经典图像处理技术表现不佳的问题提供了最先进的解决方案。在图像识别的广义任务中,包括目标检测、图像分类和分割、活动识别、光流和姿态估计等问题,我们可以很容易地声称 DNN(深度神经网络)取得了卓越的性能。

随着计算机视觉的兴起,人们对医学成像领域的应用产生了浓厚的兴趣。尽管医学成像数据不是那么容易获得,但 DNN 似乎是对如此复杂和高维数据进行建模的理想候选者。

正如我们将看到的,医学图像通常是 3 维或 4 维的。该领域引起广泛关注的另一个原因是它对人类生活的直接影响。在美国,医疗差错是继心脏病和癌症之后的第三大死亡原因。因此,很明显,人类死亡的前三个原因与医学成像有关。这就是为什么预计到2023 年,医学影像中的人工智能和深度学习将创造一个超过 10 亿美元的全新市场。

3D医学图像分割的需求

医学图像中的3D 立体图像分割对于诊断、监测和治疗计划是必不可少的。我们将只使用磁共振图像 (MRI)。手动练习需要解剖知识,而且费用昂贵且耗时。另外,由于人为因素,它们可能不准确。尽管如此,自动体积分割可以节省医生的时间,并为进一步分析提供准确的可重复解决方案。

我们将从描述 MR 成像的基础开始,因为了解输入数据对于训练深度架构至关重要。然后,我们为读者提供可有效用于此任务的 3D-UNET 概述。

医学影像和核磁共振

医学成像旨在揭示隐藏在皮肤和骨骼中的内部结构,以及诊断和治疗疾病。医学磁共振(MR) 成像使用来自氢原子核的信号来生成图像。在氢核的情况下:当它暴露于外部磁场(表示为 B0)时,磁矩或自旋会像罗盘指针一样与磁场方向对齐。

所有恒定磁化强度都通过一个额外的射频脉冲旋转到另一个平面,该脉冲足够强并且施加的时间足够长以倾斜磁化强度。励磁后,磁化立即在另一个平面上旋转。旋转磁化在接收线圈中产生 MR 信号。然而,MR 信号由于两个独立的过程而迅速衰减,这两个过程会降低磁化强度,从而导致返回到激发前存在的稳定状态,从而产生所谓的T1 图像和 T2 磁共振图像. T1 弛豫与原子核对其周围的能量过剩有关,而 T2 弛豫是指各个磁化矢量开始相互抵消的现象。上述现象是完全独立的。因此,不同的强度代表不同的组织,如下图所示:

3D 医学图像表示

由于医学图像表示 3D 结构,因此处理它们的一种方法是使用 3D 体积的切片并执行常规的 2D 滑动卷积,如下图所示。假设红色矩形是一个 5x5 的图像块,可以用包含强度值的矩阵表示。体  素强度和核用 3x3 卷积核进行卷积,如下图所示。在相同的模式下,内核在整个 2D 网格(医学图像切片)上滑动,并且每次我们执行互相关。卷积的 5x5 补丁的结果存储在 3x3 矩阵中(出于说明目的没有填充),并在网络的下一层传播。

或者,您可以将它们表示为类似于中间层的输出。在深度架构中,我们通常有多个特征图,这实际上是一个 3D 张量。如果有理由相信附加维度之间存在模式,则执行 3D 滑动卷积是最佳选择。医学图像就是这种情况。与编码 2D 域中对象的空间关系的 2D 卷积类似,3D 卷积可以描述 3D 空间中对象的空间关系。由于2D 表示对于医学图像来说是次优的,我们将在这篇文章中选择不使用 3D 卷积网络。

医学图像切片可以看作是一个中间层的多个特征图,不同的是它们之间有很强的空间关系

模型:3D-Unet

对于我们的示例,我们将使用广为接受的 3D U 形网络。后者(代码)扩展了对称 u 形 2D Unet 网络的连续概念,该网络在 RGB 相关任务(例如语义分割)中产生了令人印象深刻的结果。该模型有一个编码器(收缩路径)和一个解码器(合成路径)路径,每个路径都有四个分辨率步骤。在编码器路径中,每一层包含两个 3 ×3 ×3 卷积,每个卷积后面跟着一个整流线性单元 (ReLu),然后是一个 2 ×2 ×2 最大池化,每个维度的步幅为 2。在解码器路径中,每一层由一个 2×2×2 的转置卷积组成,每个维度的步幅为 2,然后是两个 3×3×3 的卷积,每个卷积后面是一个 ReLu。快捷方式跳过连接来自分析路径中相同分辨率的层为合成路径提供了必要的高分辨率特征。在最后一层,一个 1×1×1 的卷积将输出通道的数量减少到标签的数量。通过在最大池化之前将通道数加倍来避免瓶颈。在每个 ReLU 之前引入了3D批量归一化。每个批次在训练期间使用其平均值和标准差进行归一化,并使用这些值更新全局统计数据。接下来是一个明确学习规模和偏差的层。下图说明了网络架构。

损失函数:Dice loss

由于固有的任务不平衡,交叉熵不能总是为这个任务提供好的解决方案。具体来说,交叉熵损失会单独检查每个像素,将类别预测(深度像素向量)与我们的 one-hot 编码目标向量进行比较。因为交叉熵损失单独评估每个像素向量的类别预测,然后对所有像素进行平均,所以我们本质上是在对图像中的每个像素进行平等学习。如果您的各种类在图像中的表示不平衡,这可能是一个问题,因为最流行的类可以主导训练。

我们将尝试在脑部 MRI 中区分的 4 类在图像中具有不同的频率(即空气比其他组织具有更多的实例)。这就是采用骰子损失度量的原因。它基于Dice 系数,它本质上是两个样本之间重叠的度量。该度量的范围从 0 到 1,其中 Dice 系数为 1 表示完全重叠。Dice loss 最初是为二进制分类而开发的,但它可以推广到与多个类一起工作。随意使用我们的 Dice loss 的多类实现。

医学影像数据

深度架构需要大量训练样本才能产生任何有用的广义表示,而标记的训练数据通常既昂贵又难以产生。这就是为什么我们每天都会看到使用生成学习来生成越来越多的医学成像数据的新技术。此外,训练数据必须能够代表网络将来会遇到的数据。如果训练样本是从与现实世界中遇到的不同的数据分布中提取的,那么网络的泛化性能将低于预期。

由于我们专注于大脑 MRI 自动分割,因此简要描述 DNN 试图区分的大脑基本结构很重要 a) 白质 (WM),b)灰质 (GM),c) 脑脊液 (CSF ) . 下图说明了脑 MRI 切片中的分割组织。

2017 年 I-Seg 医学影像数据挑战赛 

在这个关键时期将婴儿大脑MRI 图像准确分割为白质 (WM)、灰质 (GM) 和脑脊液 (CSF),对于研究正常和异常的早期大脑发育都具有重要意义。生命的第一年是出生后人类大脑发育最活跃的阶段,伴随着快速的组织生长和广泛的认知和运动功能的发展。这个早期阶段对许多神经发育和神经精神疾病至关重要,例如精神分裂症和自闭症。这一关键时期越来越受到人们的关注。

该数据集旨在促进 6 个月婴儿脑部 MRI 的自动分割算法。本次挑战赛与MICCAI 2017联合举办,共有21支国际团队参赛。该数据集包含 10 个来自专家的密集注释图像和 13 个用于测试的图像。不提供测试标签,您只有在官网上传结果后才能看到您的分数。对于每个主题,都有一个 T1 加权和 T2 加权图像。

第一个主题将用于测试。原始 MR 卷的大小为 256x192x144。在 3D-Unet 中,使用的采样子体积大小为 128x128x64。生成的训练数据集由 500 个子卷组成。对于验证集,使用了来自一名受试者的 10 个随机样本。

 Medical Zoo Pytorch

为什么:我们的目标是在 PyTorch 中实现最先进的 3D 深度神经网络的 开源医学图像分割库以及最常见的医学数据集的数据加载器。我们存储库的第一个稳定版本预计将很快发布。

我们坚信开放和可重复的深度学习研究。为了重现我们的结果,此存储库中提供了这项工作的代码和材料。该项目最初是一篇硕士论文,目前正在进一步开发中。

把它们放在一起-实施细节 

我们使用了 PyTorch 框架,它被认为是最广泛接受的深度学习研究工具。随机梯度下降,单个批次大小,学习率为 1e-3,权重衰减为 1e-8,用于所有实验。我们在存储库中提供了测试,您可以轻松地重现我们的结果,以便您可以使用代码、模型和数据加载器。

最近我们用 Pytorch 添加了 Tensorboard 可视化。这个惊人的功能可以让您保持清醒,并让您跟踪模型的训练过程。下面你可以看到一个保持训练统计数据的例子,骰子系数。和损失以及每类分数以了解模型行为。

代码

让我们将所有描述的模块放在一起,用 MedicalZoo 用一个简短的脚本(用于说明目的)设置一个实验。

# Python libraries
import argparse
import os

# Lib files
import lib.medloaders as medical_loaders
import lib.medzoo as medzoo
import lib.train as train
import lib.utils as utils
from lib.losses3D import DiceLoss

def main():
    args = get_arguments()
    utils.make_dirs(args.save)

    training_generator, val_generator, full_volume, affine = medical_loaders.generate_datasets(args,
                                                                                               path='.././datasets')
    model, optimizer = medzoo.create_model(args)
    criterion = DiceLoss(classes=args.classes)

    if args.cuda:
        model = model.cuda()
        print("Model transferred in GPU.....")

    trainer = train.Trainer(args, model, criterion, optimizer, train_data_loader=training_generator,
                            valid_data_loader=val_generator, lr_scheduler=None)
    print("START TRAINING...")
    trainer.training()


def get_arguments():
    parser = argparse.ArgumentParser()
    parser.add_argument('--batchSz', type=int, default=4)
    parser.add_argument('--dataset_name', type=str, default="iseg2017")
    parser.add_argument('--dim', nargs="+", type=int, default=(64, 64, 64))
    parser.add_argument('--nEpochs', type=int, default=200)
    parser.add_argument('--classes', type=int, default=4)
    parser.add_argument('--samples_train', type=int, default=1024)
    parser.add_argument('--samples_val', type=int, default=128)
    parser.add_argument('--inChannels', type=int, default=2)
    parser.add_argument('--inModalities', type=int, default=2)
    parser.add_argument('--threshold', default=0.1, type=float)
    parser.add_argument('--terminal_show_freq', default=50)
    parser.add_argument('--augmentation', action='store_true', default=False)
    parser.add_argument('--normalization', default='full_volume_mean', type=str,
                        help='Tensor normalization: options ,max_min,',
                        choices=('max_min', 'full_volume_mean', 'brats', 'max', 'mean'))
    parser.add_argument('--split', default=0.8, type=float, help='Select percentage of training data(default: 0.8)')
    parser.add_argument('--lr', default=1e-2, type=float,
                        help='learning rate (default: 1e-3)')
    parser.add_argument('--cuda', action='store_true', default=True)
    parser.add_argument('--loadData', default=True)
    parser.add_argument('--resume', default='', type=str, metavar='PATH',
                        help='path to latest checkpoint (default: none)')
    parser.add_argument('--model', type=str, default='VNET',
                        choices=('VNET', 'VNET2', 'UNET3D', 'DENSENET1', 'DENSENET2', 'DENSENET3', 'HYPERDENSENET'))
    parser.add_argument('--opt', type=str, default='sgd',
                        choices=('sgd', 'adam', 'rmsprop'))
    parser.add_argument('--log_dir', type=str,
                        default='../runs/')

    args = parser.parse_args()

    args.save = '../saved_models/' + args.model + '_checkpoints/' + args.model + '_{}_{}_'.format(
        utils.datestr(), args.dataset_name)
    return args


if __name__ == '__main__':
    main()

实验结果 

下面你可以看到模型的训练和验证骰子损失曲线。监控您的模型性能并调整参数以获得如此平滑的训练曲线非常重要。很容易理解这个模型的效率。

 

该模型在子卷的验证集中达到了大约 93% 的骰子系数分数。最后但同样重要的是,让我们看看验证集中 3D-Unet 的一些可视化预测。尽管预测是 3D 体积,但我们在这里只展示一个代表性切片。通过获取 MRI 的多个子体积,可以将它们组合起来形成完整的 3D MRI 分割。请注意,我们使用子卷采样的事实是数据增强。

来自训练有素的 3D-Unet 的非标准化最后一层预激活。网络学习高度语义的任务相关内容,这些内容对应于类似于输入的大脑结构。
 

我们的预测 VS 基本事实。您认为哪个预测是基本事实?仔细看看再做决定!需要注意的是,我们在这里只展示了中轴切片,但预测是一个 3D 体积。可以观察到,该网络完美地预测了空气体素,但难以区分组织边界。但是,让我们再次检查以找出真正的那个!

现在,我相信您可以区分基本事实。如果不确定,请查看文章末尾:)

最近我们还使用 Pytorch 添加了Tensorboard可视化。这个惊人的功能可以让你保持清醒,让你跟踪模型的训练过程。您可以在下面看到一个保留训练统计数据、骰子系数和损失以及每类分数以了解模型行为的示例。

 

很明显,不同的组织具有不同的精度,即使从训练开始也是如此。例如,查看验证集中从高值开始的空气体素,因为它是不平衡数据集的最主要类别。另一方面,灰质从最低值开始,因为它最难区分且训练实例较少。

结论

这篇文章部分说明了我们团队开发的MedicalZoo Pytorch 库的一些特性。深度学习模型将为社会提供身临其境的医学影像解决方案。

在本文中,我们回顾了医学成像和 MRI 的基本概念,以及如何在深度学习架构中表示和使用它们。然后,我们描述了一种被广泛接受的高效 3D 架构(Unet)和骰子损失函数来处理类不平衡。最后,我们结合了上述所有特征,并使用库脚本提供了我们在脑 MRI 中的实验分析的初步结果。结果证明了 3D 架构的效率和深度学习在医学图像分析中的潜力。

翻译原稿来自:https://theaisummer.com/medical-image-deep-learning/

iSeg-2017 challenge:https://iseg2017.web.unc.edu/

MedicalZooPytorch:https://github.com/black0017/MedicalZooPytorch

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

医学成像中的深度学习——基于PyTorch的3D 医学图像分割 的相关文章

  • 点列表的 3D 轮廓(凹壳)

    我有一个 C 中的 Vector3 点列表 我需要计算这些点的凹轮廓 确实有很多参考资料 特别是对于 凸 分辨率 由于格雷厄姆算法 我已经成功实现了 然而 由于我现在需要有效地计算凹轮廓 所以我迷失了 维基百科确实列出了很多用于凸计算的资源
  • 可点击的精灵标签?

    我一直在玩精灵文本标签 更具体地说是这个例子 http stemkoski github io Three js Sprite Text Labels html http stemkoski github io Three js Sprit
  • 一次性渲染阴影

    考虑到阴影投射的成本 我想知道对于动态定位的静态对象 例如 程序城市 是否有一个功能或可能 实验性的方法可以在 Three js 中仅渲染一次阴影贴图 甚至在 webgl 中 因此 结果可以在静态对象的下一帧中免费使用 仅当物体移动时才会进
  • 颜色重新映射 - 使用 3D 网格匹配目标调色板?

    假设我有颜色 FOO 它以 RGB 格式存储 我需要重新着色 FOO 以便它与颜色列表中最接近的颜色匹配 即时执行此操作 我是否无法将每种颜色的 RGB 值视为 3D 网格上的点 r x g y b z 并计算点 FOO 与每个颜色点之间的
  • C++ Irrlicht 程序未链接:“未定义对‘__imp_createDevice’的引用”

    我的 Irrlicht 程序无法链接 我使用的编译器是g Code include
  • 3D 数学:根据“向上”和“向上”正交向量计算倾斜(滚动)角度

    我希望这是提出这个问题的正确位置和这个一样 https stackoverflow com questions 3035590 bank angle from up vector and look at vector 但表示为纯数学而不是图
  • 如何在 GTX 560 及更高版本上使用 OpenGL 进行立体 3D?

    我正在使用在 Windows 7 上运行的开源触觉和 3D 图形库 Chai3D 我重写了该库以使用 Nvidia nvision 执行立体 3D 我将 OpenGL 与 GLUT 一起使用 并使用 glutInitDisplayMode
  • 在 RGL 中将立方体绘制到 3D 散点图中

    我正在尝试向 3D 散点图添加较小的立方体 网格 具有指定边长 我希望立方体位于原点 我该怎么做呢 我已经玩过cube3d 但我似乎无法将立方体正确定位 也无法使其成为网格 因此我可以看到它包含的数据点 这是我所拥有的 library rg
  • 如何在 React Native 中渲染自定义 3D 对象

    我已经成功使用 Three js expo Three 和 expo gl 在 React Native 中配置了红色立方体的 3D 渲染 但我想让用户渲染他们自己可能拥有的自定义 3D 对象 obj 或 mtl 扩展名 但我不确定如何让他
  • 将 3D 场景导入babylonJS

    所以我今天读到巴比伦JS http blogs msdn com b eternalcoding archive 2013 06 27 babylon js a complete javascript framework for build
  • 如何使用 matplotlib 将 3d 数据单位转换为显示单位?

    这可能有点疯狂 但我正在尝试使用 matplotlib v1 1 0 创建 3d 散点图的可点击图像图 我已经阅读了如何对二维图进行操作 参见这个博客 http hackmap blogspot com 2008 06 pylab matp
  • 在 R 中根据时间序列数据制作 3D 曲面

    我有一个大型数据集 我想从中制作 3D 表面 我希望 x 轴为日期 y 轴为时间 24 小时 z 轴 高度 为我的值 我是 R 初学者 所以越简单越好 http www quantmod com examples chartSeries3d
  • 在 libgdx 中批处理多维数据集时出现问题

    我正在尝试开发一款游戏 在屏幕上渲染多达 300 个立方体 为每个多维数据集创建新的 modelInstance 时 modelBatch 的性能非常糟糕 据我所知 没有 3d 批处理可以将所有立方体批处理到一次绘制调用 所以我拼命地尝试以
  • Godot 3d 得到向前矢量

    我想知道是否有办法获取 godot 3d 中空间节点的前向向量 统一起来 这就是transform forward Godot 给了我一个旋转向量 但我不知道如何将其转换为方向向量 戈多版本的transform forward是什么 前进是
  • 在 R 中绘制 3D 数据

    我有一个 3D 数据集 data data frame x rep c 0 1 0 2 0 3 0 4 0 5 each 5 y rep c 1 2 3 4 5 5 data z runif 25 min data x data y 0 1
  • 使用纽厄尔方法在 Python 中计算表面法线

    我正在尝试实现 Newell 方法来计算 Python 中的表面法向量 基于以下伪代码here https www opengl org wiki Calculating a Surface Normal Begin Function Ca
  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • 透视变换矩阵的计算

    给定 3D 空间中的一个点 如何计算齐次坐标中的矩阵 将该点投影到平面上z d 其中原点是投影中心 好吧 让我们尝试解决这个问题 扩展伊曼纽尔的答案 Assuming如果您的视图向量直接沿着 Z 轴 则所有尺寸都必须按视图平面距离的比例进行
  • SceneKit - SCNPlane 上的漫反射 png 图像

    在我的项目中 我试图在场景中显示一些 png 图像 所以我创建了一个 SCNPlane 并对图像进行漫反射 let image UIImage named imageName let node SCNNode geometry SCNPla
  • C++ 从一组点进行平面插值

    我正在使用 PCL 点云 库用 C 进行编程 我的问题是 计算某些点的方差 但仅相对于平面的垂直轴 我会解释一下自己 所以我正在做的是将点云按表面平滑度划分为多个片段 区域生长分割 http pointclouds org document

随机推荐

  • java批量插入数据库之写绑定变量

    最近查到关于sql批量写入和绑定变量的问题 看到了很多好的帖子 再次进行总结 数据库在执行SQL语句时会首先解析SQL语句 解析又分为硬解析与软解析 说到硬解析和软解析 就不能不说一下Oracle对sql的处理过程 当你发出一条sql语句交
  • Linux C 多线程

    为什么会有线程 gt gt gt gt 进程实现多任务的缺点 进程间切换的计算机资源开销很大 切换效率非常低 进程间数据共享的开销也很大 线程和进程的关系 线程是进程的一个执行单元 是进程内的调度实体 比进程更小的独立运行的基本单位 线程也
  • In-Doubt Transactions

    In Doubt Transactions The two phase commit mechanism ensures that all nodes either commit or perform a rollback together
  • 常用的PHP命令执行函数及利用方式

    PHP命令执行函数常配合代码执行漏洞使用 利用命令执行函数执行操作系统命令 从而发起攻击 接下来就简单分享几个常用的PHP命令执行函数 system system 函数可以执行系统命令 并将命令执行的结果直接输出到界面中 使用时直接在参数中
  • 初窥Linux神秘面纱(叁):基本指令讲解(下)及疑难解惑(精)

    目录 date指令 cal指令 find指令 grep指令 alias指令 wc指令 whereis指令 zip unzip指令 tar指令 date指令 date 指定格式显示时间 date Y m d date 用法 date OPTI
  • Linux驱动入门(6.2)按键驱动和LED驱动 --- 将逻辑电平与物理电平分离

    前言 1 在学习完Linux驱动入门 6 LED驱动 设备树之后 我们发现一个问题 设备树明明的gpios信息明明有三个元素gpios lt gpio5 3 GPIO ACTIVE LOW gt gpio5 3 用来确定控制那个引脚 而GP
  • [4G&5G专题-127]:5G培训部署篇-4-基站项目的安装与验收过程

    作者主页 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 118456868 目录 第1部分 基站项目的安装与
  • 快排函数

    C 语言中排序的算法有很多 系统也提供一个函数qsort 可以实现快速排序 它包含在
  • 水浊度传感器( ADC 代码详解)

    水浊度传感器 最后代码已上传 代码文章链接 github 代码链接在该文章最后 文章目录 硬件使用 软件使用 实现说明 水浊度原理 具体操作代码说明 配置通道规则 开启软件转换 判断转换完成 读取 ADC 值 计算水浊度 通过串口发送到串口
  • spring-cloud - 部署

    一 jenkins git部署 1 1 jenkins git安装 1 2 jenkins项目配置 1 3 git配置触发器 二 docker部署 2 1 打包 根据项目pom中配置利用mvn package 进行打包生成jar docke
  • 教你如何用命令行装逼,做一个有逼格的程序员

    教你如何用命令行装逼 做一个有逼格的程序员 事先声明 如果你不知道打开windows的命令行工具 我是绝对不会告诉你是用 windows R 然后键入 cmd 打开的 windows 自带的命令行工具很强大 毕竟计算机一开始都是以键入命令的
  • python爬虫八:多任务线程

    1 多线程 举例 有很多的场景中的事情是同时进行的 比如开车的时候 手和脚共同来驾驶汽车 再比如唱歌跳舞也是同时进行的 定义 线程是进程的一个实体 是CPU调度和分派的基本单位 它是比进程更小的能独立运行的基本单位 线程自己基本上不拥有系统
  • 基于PTB数据集实现RNN-LSTM循环神经网络(智能填词)

    本篇直入主题 做一篇学习的记录 在学习RNN的时候 跟着教程敲了一个案例 分为处理方法文件 神经网络模型文件 训练方法文件 测试文件 所有的操作和重要内容都在代码中作了详细的注释 一 目标神经网络模型 二 数据集 PTB数据集下载地址 ht
  • series选取值_Series和DataFrame的数据取值与选择

    数据取值与选择 NumPy数据取值的方法 包括取值操作 如arr 2 1 切片操作 如arr 1 5 掩码操作 如arr arr gt 0 花哨的索引操作 如arr 0 1 5 以及组合操作 如arr 1 5 在NumPy的二维数组里 da
  • qt触摸屏调试(tslib1.21 + qt5.12.9)

    过程是痛苦的 因为之前没调试过qt 也没啥总结的 可能换个设备还是慢慢摸索调试 前文已介绍了如果编译 tslib和qt 且非常详细 那个步骤现在看没有问题 我在调试qt的时候 翻看了好多遍前文编译的库 看编译过程是否有问题 我这不叫写文章
  • excel文件无法打印提示内存不足_打开Excel时,提示“Excel词典(XLLEX.DLL)文件丢失或损坏”...

    使用的是OFFICE2007完整版 一直都是正常的 突然打开Excel时 提示 Excel词典 XLLEX DLL 文件丢失或损坏 怎么办 打开Excel时 提示 Excel词典 XLLEX DLL 文件丢失或损坏 答 出现这种情况 是因为
  • 使用Apache CXF和Apache Axis2实现Web Services客户端

    记录 314 场景 在Spring Boot微应用上 使用Apache CXF框架实现Web Services客户端 调用Web Services服务端 使用Apache Axis2框架实现Web Services客户端 调用Web Ser
  • python判断某一字符是否在字符串中的函数_Python实现判断字符串中包含某个字符的判断函数示例...

    Python实现判断字符串中包含某个字符的判断函数示例 本文实例讲述了Python实现判断字符串中包含某个字符的判断函数 分享给大家供大家参考 具体如下 coding utf8 参数包含两个 containVar 查找包含的字符 strin
  • 【声音

    gbcax链交所 声音 众鼎集团董事长张哲仁 目前应专注区块链赋能实体经济 众鼎集团董事长张哲仁在第十二届上海金洽会之首届区块链论坛上表示 现在只有将发展重心聚焦应用场景落地 专注区块链赋能实体经济 才是未来区块链的正确发展方向
  • 医学成像中的深度学习——基于PyTorch的3D 医学图像分割

    深度学习和医学成像 计算机视觉领域深度网络的兴起为经典图像处理技术表现不佳的问题提供了最先进的解决方案 在图像识别的广义任务中 包括目标检测 图像分类和分割 活动识别 光流和姿态估计等问题 我们可以很容易地声称 DNN 深度神经网络 取得了