深度学习三维图像数据增强——Monai实现

这篇具有很好参考价值的文章主要介绍了深度学习三维图像数据增强——Monai实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

笔者接触深度学习不久,跑过一些二维图像的深度学习代码,对于二维图像,深度学习数据增强可借助skimage、opencv、imgaug、Albumentations、Augmentor等多数主流的库实现,在这里放一个大神的链接,可供参考。但对于三维数据,能够借助的库便少了起来,常用的有TorchIO和Monai,而针对于医学领域,Monai是一个不错的选择。笔者通过自学,将Monia库总结以下要点。

详细可参考Monai官方文档:https://docs.monai.io/en/1.1.0/transforms.html

二、数据类型

对于Monai的调用数据类型,官方支持以下格式:

  1. 字符串 :需是数据文件的路径,通过LoadImage可加载数据;
  2. 数据 :数据类型为Numpy ndarray或PyTorch Tensor,数据的大小通常为(num_channels,spatial_dim_1[,spatial_dim_2,…])。在深度学习中,Dataset返回的数据类型通常是[C,D,H,W],C即代表通道数,D,H,W分别是三维数据的深度、高度、宽度;同样,在Monai中,即使通道是1,通道数也不可被省略官方推荐包含通道数,但在实际使用过程中,我发现并未有严格的限制,不包含也可正常运行

需要注意的是,无论输入是numpy.ndarray还是torch.tensor类型,多数转换输出为torch.tensor,

三、Compose

通常,在做数据增强时,我们需要用到批量操作,Monai也提供了相应的Compose批量转换操作。官方的解释是:Compose提供了以顺序方式将一系列可调用项链接在一起的能力。序列中的每个转换都必须接受一个参数并返回一个值。
Compose的调用有两种方式,如下:
1.通过一系列转换,接受并返回单个ndarray/tensor/类张量参数。
2.通过一系列转换,接受并返回包含一个或多个参数的字典。此类转换必须具有传递语义,即字典中未使用的值必须复制到返回字典。需要在每个变换的输入和输出之间复制字典。

对于监督学习,我们通常希望将图像数据和标签数据做同类型的转换,因此,Monai的第二种Compose调用方式极大地方便了我们使用。下面,以一串代码为例介绍该使用方式:

import torch
from monai.transforms import Compose, RandHistogramShiftD, Flipd, Rotate90d

#批量转换
KEYS = ("image", "label")
class aug():
    def __init__(self):
        self.random_rotated = Compose([
            Rotate90d(KEYS, k=1, spatial_axes=(2,3),allow_missing_keys=True),
            Flipd(KEYS, spatial_axis=(1,2,3),allow_missing_keys=True),
            RandHistogramShiftD(KEYS,  prob=1, num_control_points=30, allow_missing_keys=True),
            # ToTensorD(KEYS),
        ])
    def forward(self,x):
        x = self.random_rotated(x)
        return x

上述代码忽略了Compose的其余参数,Compose的完整调用是:

Compose([transformA, transformB, transformC], map_items=True, unpack_items=False, log_stats=False)

mapitems(bool)–如果数据是列表或元组,是否对输入数据中的每个项应用转换。默认为True。
unpackitems(bool)–是否使用*作为转换的可调用函数的参数来解压缩输入数据。默认为False。
log_stats(bool)–发生错误时是否记录数据和应用的转换的详细信息,对于NumPy数组和PyTorch Tensor,记录数据形状和值范围,对于其他元数据,直接记录值。默认为False。
在这里做一个提示:并非所有的转换都需要标签和图像一起转换,如图像的标准化,标签并不需要,标签仅需与图像一起进行旋转、平移、翻转或变形,因此,Compose需和其他一系列转换结合使用。

四、OneOf

有时我们需要进行多种转换中的一种即可,便可采用OneOf进行编写,以下是OneOf的各参数:

monai.transforms.OneOf(transforms=None, weights=None, map_items=True, unpack_items=False, log_stats=False)

transform即为可调用函数的序列;weights为对应于变换中每个函数的调用概率,概率归一化为1;其余参数不再详细介绍。

五、常见转换类型

Monai的转换分为Vanilla TransformsDictionary Transforms,顾名思义,Dictionary Transforms适用于指定数据中的字典进行转换,两种转换函数之间只差一个字母d,下面介绍常见的转换类型及两种转换函数。

5.1裁减和填充

Vanilla Transforms Dictionary Transforms
指定值填充(可指定每个维度的值) pad padd
空间对称填充 SpatialPad SpatialPadd
边缘填充(指定边框) BorderPad BorderPadd
指定区域裁减 SpatialCrop SpatialCropd

5.2强度增强

Vanilla Transforms Dictionary Transforms
随机Guass噪声 RandGaussianNoise RandGaussianNoised
随机强度偏移 RandShiftIntensity RandShiftIntensityd
MR图像的随机偏置场增强 RandBiasField RandBiasFieldd
随机对比度调整 RandAdjustContrast RandAdjustContrastd
图像锐化 RandGaussianSharpen RandGaussianSharpend
强度归一化(标准化) NormalizeIntensity NormalizeIntensityd
Guass平滑 GaussianSmooth GaussianSmoothd
直方图正态化 HistogramNormalize HistogramNormalized

5.3空间增强

Vanilla Transforms Dictionary Transforms
随机旋转 RandRotate RandRotated
随机指定轴翻转 RandFlip RandFlipd
随机任意轴翻转 RandAxisFlip RandAxisFlipd
随机仿射变换 RandAffine RandAffined
随机3D弹性变形 Rand3DElastic Rand3DElasticd
随机旋转90度 RandRotate90 RandRotate90d

此外还有平滑处理和针对于MRI的处理,详见官方文档。

六、注意(记录坑)

6.1 RandRotate90

RandRotate90(prob=0.5, spatial_axes=(1, 2)),这里的spatial_axes=(1, 2)是针对数据格式为(z,y,x)设置的,如果你的数据格式为(x,y,z)那么就是spatial_axes=(0,1)

持续记载并更新中…

这里再放一些大神的文章及相关参考资料:
1.使用MONAI深度学习框架进行3D图像空间变换
2.医学图像深度学习3D数据增强之MONAI框架方法利用
3.Monai官方文档Transforms部分文章来源地址https://www.toymoban.com/news/detail-759715.html

到了这里,关于深度学习三维图像数据增强——Monai实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 使用OpenCV与深度学习去除图像背景:Python实现指南

    第一部分:简介和OpenCV的背景去除 在现代的图像处理和计算机视觉应用中,背景去除是一个常见的需求。这不仅用于产品摄影和电商平台,还广泛应用于各种图像分析任务。在这篇文章中,我们将使用OpenCV和深度学习技术来实现此功能,并通过Python进行实现。本教程会介绍两

    2024年01月20日
    浏览(36)
  • 竞赛 深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别

    🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的昆虫识别算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:4分 创新点:4分 🧿 更多资料, 项目分享: https://git

    2024年02月07日
    浏览(35)
  • 【深度学习:数据增强】计算机视觉中数据增强的完整指南

    可能面临的一个常见挑战是模型的过拟合。这种情况发生在模型记住了训练样本的特征,但却无法将其预测能力应用到新的、未见过的图像上。过拟合在计算机视觉中尤为重要,在计算机视觉中,我们处理高维图像输入和大型、过度参数化的深度网络。有许多现代建模技术可

    2024年02月03日
    浏览(35)
  • 大数据毕业设计 深度学习垃圾图像分类系统 - opencv python

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月02日
    浏览(48)
  • 深度学习进行数据增强(实战篇)

    本文章是我在进行深度学习时做的数据增强,接着我们上期的划分测试集和训练集来做. 文章目录 前言 数据增强有什么好处? 一、构造数据增强函数 二、数据增强 总结 很多人在深度学习的时候在对数据的处理时一般采用先数据增强在进行对训练集和测试集的划分,其实我感觉

    2024年01月23日
    浏览(43)
  • 大数据毕设项目 - opencv python 深度学习垃圾图像分类系统

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月21日
    浏览(34)
  • 【大数据毕设选题】opencv python 深度学习垃圾图像分类系统

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月03日
    浏览(40)
  • 大数据毕设分享 opencv python 深度学习垃圾图像分类系统

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月01日
    浏览(36)
  • 计算机竞赛 深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别

    🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的昆虫识别算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:4分 创新点:4分 🧿 更多资料, 项目分享: https://git

    2024年02月07日
    浏览(69)
  • 图像数据增强算法汇总(Python)

    飞浆AI Studio在线可运行项目一文速学-图像数据增强算法汇总 数据增强是一种通过使用已有的训练样本数据来生成更多训练数据的方法,可以应用于解决数据不足的问题。数据增强技术可以用来提高模型的泛化能力,减少过拟合现象。比如在狗猫识别项目中,通过随机旋转、

    2024年02月08日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包