python开发h5页面_大数据和python有关吗

python开发h5页面_大数据和python有关吗文章目录前言HDF与h5简介数据组织方式HDFView下载与安装在WIN10系统安装后打开出现黑框闪退的解决方法python对h5文件的操作批量制作h5文件h5文件的提取,另存为nii文件前言一般来说,深度学习的训练数据和训练后的参数都会保存为h5格式文件,对于训练数据来说,深度学习中当训练大量数据时,如果从硬盘中加载再预处理,再传递进网络,这是一个非常耗时的过程。其中从硬盘中读取图片会花费大量时间,更可行在方法是将其存在单个文件中,如h5文件。那么h5文件对于深度学习训练具有什么优势呢?可以支持

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

一般来说,深度学习的训练数据和训练后的参数都会保存为h5格式文件,对于训练数据来说,深度学习中当训练大量数据时,如果从硬盘中加载再预处理,再传递进网络,这是一个非常耗时的过程。其中从硬盘中读取图片会花费大量时间,更可行在方法是将其存在单个文件中,如h5文件。

那么h5文件对于深度学习训练具有什么优势呢?

  • 可以支持大量数据,其中数据集大小大于RAM大小
  • 可以增加训练的batch size
  • 不用指定数据和数据的shape

HDF与h5

简介

那么什么是HDF5文件呢?
H5文件是层次数据格式第5代的版本(Hierarchical Data Format,HDF5),它是用于存储科学数据的一种文件格式和库文件。
在这里插入图片描述

  • H5是一种开源文件格式,支持大型、复杂的异构数据。
  • H5使用类似“文件目录”的结构,允许以多种不同的结构化方式组织文件中的数据,就像处理计算机上的文件一样。
  • H5格式还允许嵌入元数据,使其具有自描述性。

数据组织方式

h5文件中有两个主要结构:组“group”和数据集“dataset”。 一个h5文件就是 “group” 和 “dataset” 二合一的容器。

  • group:一种分组结构,包含零个或多个dataset(数据集) 或group(组)的实例,以及支持的元数据。
  • dataset :类似数组组织形式的数据集合,像 numpy 数组一样工作,一个dataset即一个numpy.ndarray。具体的dataset可以是图像、表格,甚至是pdf文件和excel。

处理group和dataset在许多方面类似于处理 UNIX 中的目录和文件。 与 UNIX 目录和文件一样,H5 文件中的对象通常通过提供完整(或绝对)路径名来描述。
在这里插入图片描述
H5 group
H5 group是包含0个或者多个h5对象的结构。一个group有两部分组成:

  • group header:包含名称和属性列表
  • group 符号表:属于该group对象的列表

H5 datasets
数据集以两部分存储在文件中:header和数据数组
header包含数据集的数组部分所需的信息,以及描述或注释数据集的元数据。header信息包括对象的名称、维度、数据类型、有关数据本身如何存储在磁盘上的信息以及库用于加快对数据集的访问或维护文件完整性的其他信息。

HDFView

HDFView是H5文件的可视化工具。

下载与安装

在HDFView官网link点击Create Free Account创建一个账户(只有创建了账户,才能免费下载该网站上的东西),然后点击Downloads下载与你电脑对应的HDFView版本。

比如,我的电脑是64位Windows系统,我下载了HDFView-3.1.2-win10_64-vs16.zip 这个文件,下载后解压,双击.exe文件按步骤安装(依次点击下一步即可,可以自定义安装目录,需要注意的是安装目录不能是中文,后面使用过程中会报错)。

在WIN10系统安装后打开出现黑框闪退的解决方法

安装完后,发现一直打不开软件,出现闪退现象,也找不出问题出在哪里,百度了一下,大部分说是环境变量配置的问题,于是乎就去配置环境变量,步骤如下所示。
配置环境路径:右键我的电脑-属性-高级系统设置-高级-环境变量-系统变量-变量名为“PATH”,点击编辑,在路径后面继续添加:
C:\Users\Administrator\AppData\Local\HDF_Group\HDFView\runtime\bin
一直确认,再次打开HDFView则不会闪退。

python对h5文件的操作

批量制作h5文件

以深度学习制作训练集h5文件为例:
输入训练集(图片)的原图和label,输出h5文件

import h5py
import SimpleITK as sitk
import os


def GetHDF5File(imgpath, labelpath, name='HDF5Filename'):
    f = h5py.File(os.path.join('E:\\result', name + ".h5"), 'w') //根据需要修改h5存放路径
    imglist = os.listdir(imgpath)  //获取训练集原图路径下所有的文件名
    for i in imglist:   //依次遍历所有的图片
        groupname = i.split('.nii.gz')[0]  //根据需求给文件命名
        new_group = f.create_group(groupname)  //creat group
        image = sitk.ReadImage(os.path.join(imgpath, i))  //读取图片
        arr = sitk.GetArrayFromImage(image)   //将图片转换为数组形式 
        Afterarr = (((arr- arr.min()) / (arr.max() - arr.min())) * 255).astype('uint8')
        //进行归一化
        new_group.create_dataset('volume', dtype='uint8', data=Afterarr)  //create dataset
        labellist = os.listdir(labelpath)  //获取训练集label路径下所有的文件名

        for j in labellist:
        	if i == j:
            	label = sitk.ReadImage(os.path.join(labelpath, j))  
            	label_arr = sitk.GetArrayFromImage(label)
            	label = label_arr.astype('uint8')
            	new_group.create_dataset('segmentation', dtype='uint8', data=label) //根据需求命名
    f.close()

imgpath = 'E:\\imageTr'   //训练集原图的路径
labelpath = 'E:\\labelTr'   //训练集label的路径
GetHDF5File(imgpath, labelpath, 'HDF5Filename')  //根据需要修改h5的文件名,
                                                          //这里是HDF5Filename

h5文件的提取,另存为nii文件

import h5py
import os
import numpy as np
import SimpleITK as sitk

dataset = h5py.File('F:\\xxx.h5', 'r')   //指定h5文件的路径
savepath = "F:\\..."   //另存为nii文件的路径
first_level_keys = [key for key in dataset.keys()]
for first_level_key in first_level_keys:
    if not os.path.exists(os.path.join(savepath, first_level_key)):
        os.makedirs(os.path.join(savepath, first_level_key))
    second_level_keys = [key for key in dataset[first_level_key].keys()]
    for second_level_key in second_level_keys:
        if not os.path.exists(os.path.join(savepath, first_level_key, second_level_key)):
            os.makedirs(os.path.join(savepath, first_level_key, second_level_key))
        image_arr = np.array(dataset[first_level_key][second_level_key])
        img = sitk.GetImageFromArray(image_arr)
        img.SetSpacing([1.0, 1.0, 1.0])   //根据需求修改spacing
        sitk.WriteImage(img, os.path.join(savepath, first_level_key, second_level_key, second_level_key + ".nii.gz"))
    print(first_level_key)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197192.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • github邮箱验证不了_为什么github注册不成功

    github邮箱验证不了_为什么github注册不成功要使用github必须先注册个github账号,注册之后会有一个邮箱验证的步骤需要做但是如果你使用126,163或者其它的一些免费邮箱,极有可能是收不到邮箱的,这个就麻烦了不过,qq邮箱目前是可以使用的,         不过也可能出现收不到的情况,那就换个qq邮箱再试,         如果还不行,换个时间段再试;   

    2022年9月12日
    4
  • Windows + Linux 双系统的安装

    Windows + Linux 双系统的安装Windows+Linux双系统的安装参考自https://blog.csdn.net/flyyufenfei/article/details/79187656参考自https://blog.csdn.net/u012052268/article/details/77145427文章目录Windows+Linux双系统的安装1.准备工作1.1U盘启动盘的制作1.2分配磁…

    2022年7月24日
    13
  • 软件实施工程师的经验之谈(适合新手,老鸟请指正)[通俗易懂]

    软件实施工程师的经验之谈(适合新手,老鸟请指正)[通俗易懂]干了三年实施,技术没学多少,人倒是变的圆滑多了问题1:实施干嘛的呢?说简单通俗点,开发就是研发生产电视机的,我们实施就是给买电视机的人去进行安装调试,试运行完了签验收单收款和后期的日常维护(当然,如果大公司有自己的售后服务团队就另当别论了)问题2:实施的薪资(我想大部分人都关注这个吧)以一线城市北上广为例,我在北京,第一份实施工作月薪4500,出差补助一天一百,报销路费和住宿费,不报销吃饭…

    2022年6月2日
    59
  • 五、分类模型_大五模型包括

    五、分类模型_大五模型包括一、分类模型的定义文章目录一、分类模型的定义二、分类模型类型2.1、逻辑回归2.2、决策树2.3、支持向量机2.4、朴素贝叶斯在机器学习中,我们把机器学习分为监督学习和非监督学习,监督学习就是在一组有标签(有目标)属性的数据集中,我们将数据教给机器学习,让他根据数据中的属性和目标,去看题目答案一样把答案记住。之后再给类似的题目去作一样。我们把数据集中的标签,一般都标为属性,而我们又把属性分为离散属性和连续属性,每一个标签都是可以这样分的。像如果我们预测的属性值的特性是连续属性的话,我们把这种模型称为是

    2022年9月28日
    3
  • Git管理工具常用

    适用场景:通常我们到了新公司或者新的部门,一般会给你一个git的源码路径,如:http://ip:port/xxxx/xxx.git。这个时候我们需要拉取代码开发,则需要用到一些常用的工具!这里分享一下个人的经验。准备环境:1、下载两个工具(Git-2.16.2-64-bit.exe和TortoiseGit-1.8.14.0_64bit.1436148947),前者为本地…

    2022年4月1日
    37
  • 什么叫侧面指纹识别_屏下指纹和侧面指纹触控有什么区别

    什么叫侧面指纹识别_屏下指纹和侧面指纹触控有什么区别指纹识别作为一种生物识别方案,在手机上的应用为用户日常使用带来了极大的便利,从解锁手机到应用加密再到支付等场景,原本需要输密码的繁琐场景如今按一下手指就行。随着手机的发展,指纹解锁也出现了不同的解决方案,比如OPPOK3所采用的目前主流的屏下指纹解锁,以及荣耀9X所采用侧面指纹解锁。那么在实际应用场景中,哪种指纹识别更实用呢?采用了屏幕指纹的OPPOK3与侧面指纹的荣耀9X都有着真全面屏的设计…

    2022年6月30日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号