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);

hdf5格式的matlab读写操作

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

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

% train-images.idx3-ubyte / train-labels.idx1-ubyte images = loadMNISTImages('train-images.idx3-uby...

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

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

caffe中将某个目录下的jpg图像转换为hdf5类型

caffe中将某个目录下的jpg图像转换为hdf5格式,最主要的是data和label的处理,网上相关资料很少,中途踩了很多坑,最后在老师的指导下写出来了,特此记录。...

在Linux上安装netcdf4 ,解决"Can't find or link to the hdf5 library"的问题

2 Quick Instructions for Installing NetCDF on Unix Who has time to read long installation manuals...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Convert .hdf5 to .jpg with Matlab
举报原因:
原因补充:

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