Convert .hdf5 to .jpg with Matlab

原创 2016年08月31日 13:31:54

Convert .hdf5 to .jpg with Matlab


  • 背景
  • 方法
  • 小结

背景

最近用Caffe做风格化的东西,Train阶段完成了需要做一个Test。和其他的深度学习的Test不同的是,这里需要输出的是变换后的图片,而不是数据上的Loss的大小,或者分类的结果。于是涉及到Caffe的图片读取与输出的问题,以及hdf5文件到jpg的转换。这篇博文就介绍一下吧。


方法

Caffe的图片读入,使用了ImageData层,官方文档中介绍了是读入一个包括图片url地址的txt文档,然后作为data输入。需要注意的是单纯的图片地址url是不够的,需要在每个url之后加上相应的标签。如下图:
这里写图片描述
deploy.prototxt可以参考如下:

 layer {
    name: "style"
    type: "ImageData"
    top: "data"
    top: "label"
    transform_param {
        scale: 1
    }
    image_data_param {
    source:" ~/yourList.txt"
    batch_size: 2
    }
}

Caffe输出图片的方法,大部分都是按照git代码用pycaffe输出需要的layer的特征。这固然是好方法,但是这里说一个其他的方法,调用caffe的HDF5Output层。官方文档介绍说,这个层只有一个参数控制输出的hdf5文件路径。可以参考如下:

 layer {
    name: "hdf5out"
    bottom: "dataOut"
    bottom: "label"
    type: "HDF5Output"
    hdf5_output_param {
        file_name: "~/yourPath.h5"
    }
    include { phase: TEST }
}

至此,已经介绍了Caffe的图片输入和输出方法。
下面就是做一下hdf5文件到jpg图片格式的解析。搜资料说的是用hdf5View这个Java插件。也有说用python的h5py,我这里选的是Matlab,matlab官网介绍了常用的hdf5函数,主要用到的就是h5read读hdf5文件,imwrite来写入图片。
由于Matlab是操作矩阵,所以可能用到h5disp来查看hdf5的shape。
下面附上我写的一个小脚本。

 % output Path
 path = '/yourpath/videosketch/';
 tail = '.jpg';
 % read hdf5 file
 data =h5read('/h5filepath/outImg.h5','/data');
 % convert single to uint8
 data = uint8(data);
 dataSize = size(data);
 for i = 1:dataSize(4)
     % convert BGR2RGB
     p = data(:,:,1,i);
     data(:,:,1,i) = data(:,:,3,i);
     data(:,:,3,i) = p;
     % imwrite(img,strcat(path,num2str(i),tail));
     % transpose
     data(:,:,1,i) = data(:,:,1,i).';
     data(:,:,2,i) = data(:,:,2,i).';
     data(:,:,3,i) = data(:,:,3,i).';
     img = data(:,:,:,i);
     imwrite(img,strcat(path,num2str(i),tail));
 end

  1. matlab里面的data的维度要对应好,Caffe输出的hdf5默认是BGR格式的,imwrite会按照RGB来存储,所以要调整。
  2. single类型与uint8类型的转换,hdf5数据默认是single类型,是单精度64位的,与一般图片uint8直接需要类型转换,否则最直观的就是图片全白。
  3. 注意是否需要转置。

小结

主要介绍了Caffe的图片读取与存储,以及用matlab进行hdf5到jpg的转化。

版权声明:本文为博主原创文章,未经博主允许不得转载。

hdf5文件读取和写入

filename='F:\train.h5';  h5disp(filename);
  • s151506879
  • s151506879
  • 2016年07月30日 16:23
  • 10408

图片转换成HDF5文件(加载、保存)

Introduction When we talk about deep learning, usually the first thing comes to mind is a huge am...
  • witnessai1
  • witnessai1
  • 2017年11月07日 20:48
  • 247

caffe中HDF5层及数据生成

HDF 文件结构包括一个file id(文件号)、至少一个 data descriptor (数据描述符)、没有或多个 data element(数据内容)数据内容。 file id (文件号)是...
  • langb2014
  • langb2014
  • 2016年11月07日 13:06
  • 7418

生成hdf5文件用于多标签训练

生成hdf5文件用于多标签训练
  • u011762313
  • u011762313
  • 2015年09月30日 17:39
  • 8430

caffe1——图像转换成lmdb(ldeveldb)、hdf5文件

lmdb hdf5lmdbcaffe中经常使用的数据类型是lmdb或者leveldb。在caffe的tools文件夹下,提供了这样一个文件:conver_imageset.cpp,编译后,生成的可执行...
  • VictoriaW
  • VictoriaW
  • 2016年12月24日 22:40
  • 3070

利用Matlab将Caffe中的数据转成HDF5格式

% train-images.idx3-ubyte / train-labels.idx1-ubyte images = loadMNISTImages('train-images.idx3-uby...
  • m5061125
  • m5061125
  • 2016年09月22日 12:06
  • 2139

matlab 生成HDF5

  • 2015年02月05日 09:26
  • 2KB
  • 下载

hdf5格式的matlab读写操作

最近要用caffe处理一个multi-label的回归问题,就是输出是一个向量,不是一个具体的数值,这个时候之前的leveldb格式就不凑效了,因为caffe源代码里面默认label是一个数值,网上搜...
  • kuaitoukid
  • kuaitoukid
  • 2015年02月03日 13:24
  • 21654

【caffe-Windows】以mnist为例的hdf5单标签处理——matlab实现

前言主要是想尝试看一下多标签的caffe是如何进行输入输出的,但是目前还未找到基于原始caffe做多标签输入的代码,大部分都是基于源码做了一部分修改实现多标签分类,caffe官网倒是有一个多标签的Py...
  • zb1165048017
  • zb1165048017
  • 2017年06月21日 11:10
  • 1110

hdf5格式的matlab读写操作

最近要用caffe处理一个multi-label的回归问题,就是输出是一个向量,不是一个具体的数值,这个时候之前的leveldb格式就不凑效了,因为caffe源代码里面默认label是一个数值,网上搜...
  • kuaitoukid
  • kuaitoukid
  • 2015年02月03日 13:24
  • 21654
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Convert .hdf5 to .jpg with Matlab
举报原因:
原因补充:

(最多只允许输入30个字)