使用MONAI轻松加载医学公开数据集,包括医学分割十项全能挑战数据集和MedMNIST分类数据集

news2024/9/28 13:25:20

在深度学习中,使用公开数据集具有以下优点:

  • 提供了一个标准化的基准来比较不同算法或模型的性能,因为这些公共数据集被广泛使用,许多研究人员都使用它们来评估他们的方法。
  • 可以节省大量的时间和金钱,因为这些数据集已经被标注,从而避免了手动标注数据所需的努力和成本。
  • 允许研究人员在自己的算法或模型上进行测试,而无需担心数据的版权问题。
  • 跑开源代码时,可以使用公开数据快速测试。测试通后再使用的自己的数据。

为了快速开始使用公开的数据集(如 MedNIST 和 DecathlonDataset),MONAI 提供了几个开箱即用的函数(例如MedNISTDatasetDecathlonDatasetTciaDataset),其中包括数据下载,解压以及创建dataset(继承了MONAI 的 CacheDataset,训练的时候数据加载的嘎嘎快)。 预定义数据集的常用工作流程:

本次以DecathlonDatasetMedNISTDataset为例,说明如何在MONAI中使用这些数据,并简要介绍这些数据集

DecathlonDataset

医学分割十项全能挑战数据集(DecathlonDataset)是一个用于医学图像分割任务的数据集(very hot!)。该数据集包含来自不同医学影像模态(如MRI、CT等)的图像数据以及标签。数据可以从官网进行下载

MONAI的DecathlonDataset会自动该数据集,并且分好了训练、验证和测试集。它还基于monai.data.CacheDataset类来加速训练过程。

先来看一下代码

train_ds = DecathlonDataset(
    root_dir=root_dir,
    task="Task01_BrainTumour",
    section="training",
    cache_rate=1.0,  # you may need a few Gb of RAM... Set to 0 otherwise
    num_workers=4,
    download=True,  # Set download to True if the dataset hasnt been downloaded yet
    seed=0,
    transform=train_transforms,
)
train_loader = DataLoader(
    train_ds, batch_size=32, shuffle=True, num_workers=4, drop_last=True, persistent_workers=True
)

参数解析:

  • root_dir:用户用于缓存和加载 MSD 数据集的本地目录。
  • task:要下载和执行的任务:一共10个数据集,选择你要用的下载 (“Task01_BrainTumour”、“Task02_Heart”、“Task03_Liver”、“Task04_Hippocampus”、“Task05_Prostate”、“Task06_Lung”、“Task07_Pancreas”、“Task08_HepaticVessel”、“Task09_Spleen”、“Task10_Colon”)。
  • section:选择下载训练集还是其他,可以是:training、validation 或 test。
  • transform:MONAI 的常规 transform
  • download:需要下载设置为True,下载好后再运行设置为False
  • seed:随机种子,用于随机拆分训练、验证和测试数据集,默认为 0。
  • val_frac:验证数据分数百分比,默认为 0.2。Decathlon 数据仅包含带标签的训练部分和不带标签的测试部分,因此从训练部分随机选择一部分作为验证部分。
  • cache_rate:总缓存数据的百分比,默认为 1.0(全部缓存)。将取 (cache_num,data_length x cache_rate,data_length) 中的最小值。
  • num_workers:要使用的工作线程数。如果为 0,则使用单个线程。默认为 0。

只贴上了关键代码,文末取所有代码,包括import类和可视化数据代码.至于下载速度,我的v-p-n很快,不挂V-P-N速度未知。

MedNISTDataset

受 Medical Segmentation Decathlon(医学分割十项全能)的启发,上海交通大学的研究人员创建了医疗图像数据集 MedMNIST,共包含 10 个预处理开放医疗图像数据集(其数据来自多个不同的数据源,并经过预处理)。和 MNIST 数据集一样,MedMNIST 数据集在轻量级 28 × 28 图像上执行分类任务,所含任务覆盖主要的医疗图像模态和多样化的数据规模,作为 AutoML 在医疗图像分类领域的基准。

代码如下:

train_ds = MedNISTDataset(root_dir=root_dir, transform=transform, section="training", download=True)
# the dataset can work seamlessly with the pytorch native dataset loader,
# but using monai.data.DataLoader has additional benefits of mutli-process
# random seeds handling, and the customized collate functions
train_loader = DataLoader(train_ds, batch_size=300, shuffle=True, num_workers=10)

参数同DecathlonDataset基本一致,不再解析。不了解的可以查看源码

最后附上整个代码

import os
from monai.data import DataLoader, Dataset
from monai import transforms
from monai.apps import MedNISTDataset, DecathlonDataset
import matplotlib.pyplot as plt

# create a directory and load decathlon dataset
root_dir = './data'
if not os.path.exists(root_dir):
    os.makedirs(root_dir)
print(root_dir)

# transform for train set
train_transforms = transforms.Compose(
    [
        transforms.LoadImaged(keys=["image"]),
        transforms.EnsureChannelFirstd(keys=["image"]),
        transforms.ScaleIntensityRanged(keys=["image"], a_min=0.0, a_max=255.0, b_min=0.0, b_max=1.0, clip=True),
    ]
)

# create a training dataset and dataloader for MedNISTDataset and DecathlonDataset
# train_ds = MedNISTDataset(root_dir=root_dir, section="training", download=True, seed=0, transform=train_transforms)
# train_loader = DataLoader(train_ds, batch_size=32, shuffle=True, num_workers=4, persistent_workers=True)

train_ds = DecathlonDataset(
    root_dir=root_dir,
    task="Task01_BrainTumour",
    section="validation",
    cache_rate=1.0,  # you may need a few Gb of RAM... Set to 0 otherwise
    num_workers=4,
    download=False,  # Set download to True if the dataset hasnt been downloaded yet
    seed=0,
    transform=train_transforms,
)
train_loader = DataLoader(
    train_ds, batch_size=32, shuffle=True, num_workers=4, drop_last=True, persistent_workers=True
)
print(f"Length of training data: {len(train_ds)}")
print(f'Train image shape {train_ds[0]["image"].shape}')

文章持续更新,可以关注微公【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持以实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~

我是Tina, 我们下篇博客见~

白天工作晚上写文,呕心沥血

觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1235790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytorch从零开始实战10

Pytorch从零开始实战——ResNet-50算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNet-50算法实战环境准备数据集模型选择开始训练可视化模型预测总结 环境准备 本文基于Jupyter notebook,使用Python3.8&#xff0c…

成长在于积累——https 认证失败的学习与思考

1. 引言 本周二长城项目在收尾过程中,出现了一个车端无法进行注册的问题:curl提示证书认证失败(其实已经能确认问题方向了,运维人员去确认证书问题即可)。虽然最终的原因是由于长城运维人员导致的。但是这个过程让我颇…

享元模式 rust和java的实现

文章目录 享元模式介绍实现javarust实现代码 rust仓库rust仓库 享元模式 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应…

【Go语言实战】(26) 分布式搜索引擎

Tangseng 基于Go语言的搜索引擎 github地址:https://github.com/CocaineCong/tangseng 详细介绍地址:https://cocainecong.github.io/tangseng 这两周我也抽空录成视频发到B站的~ 本来应该10月份就要发了,结果一鸽就鸽到现在hh…

SPASS-指数平滑法

基本概念及统计原理 基本概念 指数平滑法的思想来源于对移动平均预测法的改进。指数平滑法的思想是以无穷大为宽度,各历史值的权重随时间的推移呈指数衰减,这样就解决了移动平均的两个难题。 统计原理 简单模型 Holt线性趋势模型 案例 为了研究上海市…

基于SSM的网络财务管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Java Finalization‘s Memory-Retention Issues 及Reference类解析

引言 《Effective Java Programming Language Guide》 一书中强烈建议不要使用java的finalize()方法去做对象消亡前的清理。因为jvm调用finalize()方法的时机并不确定,容易导致Memory-Retention Issues。通俗点讲就是内存没办法及时回收。 详细的见oracle的官方说明…

[SCTF 2021]rceme

文章目录 前置知识可变参数绕过create_function注入无字母数字RCE动态链接库so绕过disable_functions利用php原生类进行文件读取 解题过程 前置知识 可变参数绕过 PHP 在用户自定义函数中支持可变数量的参数列表。在 PHP 5.6 及以上的版本中,由 … 语法实现&#x…

axios 请求合集

post 请求 请求负载请求参数(Request Payload) import axios from axios import qs from query-stringexport function getRoles(data){return axios.post(目标地址,data,{headers:{Content-Type: application/json,},}) }表单请求参数(Form…

场景驱动的 AI 体验设计:如何让智能 IDE 赋能遗留系统重写

作为 AutoDev 的核心开发,我们不仅在不断丰富 AutoDev 的功能以满足不同公司的定制需求,还在与各种团队进行持续交流。在处理遗留系统时,我们发现程序员们日常工作中需要面对大量使用过时技术、基础设施混乱的系统。 在这个背景下&#xff0c…

云计算:开辟数字时代的无限可能

云计算是一项革命性的技术,为企业和个人提供了灵活、可扩展和高效的计算资源。本文将介绍云计算的概念、架构和优势,并探讨其在数字化时代的重要性和未来发展趋势。 引言 随着信息技术的日新月异和数字化转型的浪潮席卷全球,云计算作为一种颠…

OpenLDAP配置web管理界面PhpLDAPAdmin服务-centos9stream

之前已经发了一篇关于centos9下面配置openldap多主高可用集群的内容,不会配置ldap集群的请参考:服务器集群配置LDAP统一认证高可用集群(配置tsl安全链接)-centos9stream-openldap2.6.2-CSDN博客 这里跟着前篇文章详细说明如何配置…

【教程】cpp转python Nanobind 实践 加速轻量版 pythonbind11

主要是尝试一下把c这边的函数封装打包给python用,选择nanobind的原因是:1. 优化速度快,2. 生成二进制包小,不过pythonbind11是更为广泛知道的,nanobind也是pythonbind11作者后续做的,可以查看作者写的 why …

重生之我是一名程序员 37

哈喽啊大家晚上好! 今天呢给大家带来一个烧脑的知识——C语言中的栈溢出问题。那什么是栈溢出呢?栈溢出指的是当程序在执行函数调用时,为了保护函数的局部变量和返回地址,将这些数据存储在栈中。如果函数在函数调用时使用了过多的…

基于SSM的进销存管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

letcode::最小栈

最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。…

Mybatis系列之 parameterMap 弃用了

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) 🎃 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 🏷️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

nginx-编译安装-基础指令-信号

nginx 的编译与安装 nginx目录介绍 如果我们需要整合第三方模块,需要自己编译然此模块编译到nginx里面。apt和yum的安装只具有常用的基础功能。 下载nginx wget http://nginx.org/download/nginx-1.14.0.tar.gz/auto 目录 Changes 描述了一每个版本提供了那些特…

leetcode:环形链表

题目描述 题目链接:141. 环形链表 - 力扣(LeetCode) 题目分析 我们先了解一个知识:循环链表 尾结点不指向NULL,指向头就是循环链表 那么带环链表就意味着尾结点的next可以指向链表的任意一个结点,甚至可…