caffe多标签装hdf5接口

原创 2016年08月31日 10:44:47

这个代码的作用是输入图像的标签,在caffe里面,由于用自带的lmda和leveldb接口的标签是一个,并且这个标签只能是整数,如果想进行回归或者多标签的话就没法使用自带的接口,因此,我提供了这个接口可以实现任意标签数。
首先介绍一个这个接口的使用:
对于argv[1],里面的txt要求,每一行对应一张图片,每一行的开口对应图片名称,后面接着是标签。

#include<string>
#include<vector>
#include "H5Cpp.h"
#include "hdf5.h"
#include "hdf5_hl.h"
#include<fstream>
#include <iostream>
#include <stdlib.h>
#include<stdio.h>
#include <fstream>  // NOLINT(readability/streams)
#include <string>
#include <utility>
#include <vector>
using namespace H5;
using namespace std;
#define IMAGE_NUM_MAX 10000

//DEFINE_string(lable_type, "double", "support type of int and double");

int main(int argc, char** argv){
    //argv[1] 是label的txt
    //argv[2] 是hdf5存放的位置以及名称
    //argv[3] 是每个样本label的个数
    if (argc != 4){
        //LOG(ERROR) << "input less!" << endl;
        printf("input less\n");
        return false;
    }
    int label_size = atoi(argv[3]);
    std::ifstream in(argv[1]);
    string image_path;
    double* label = new double[label_size*IMAGE_NUM_MAX];
    int image_num = 0;
    while (in >> image_path){
        for (int i = 0; i < label_size; ++i){
            in >> label[i+image_num*label_size];
        }
        ++image_num;
    }//while 标签数组的大小为image_num*label_size
    in.close();

    H5File* file = new H5File(argv[2], H5F_ACC_TRUNC);

    double fill_val = 0.0;
    DSetCreatPropList plist;
    plist.setFillValue(PredType::NATIVE_DOUBLE, &fill_val);

    hsize_t fdim[] = {image_num, label_size};
    DataSpace dataspace(2, fdim);

    DataSet* dataset = new DataSet(file->createDataSet("label", PredType::NATIVE_DOUBLE, dataspace, plist));

    hsize_t start[2] = {0, 0};
    hsize_t count[2] = {image_num, label_size};
    dataspace.selectHyperslab(H5S_SELECT_SET, count, start);

    hsize_t mdim[] = {image_num*label_size};
    DataSpace mspace(1, mdim);

    start[0] = 0;
    count[0] = image_num*label_size;
    mspace.selectHyperslab(H5S_SELECT_SET, count, start);

    dataset->write(label, PredType::NATIVE_DOUBLE, mspace, dataspace);

    delete dataset;
    delete file;
    cout << "process " << image_num << " images " << endl;
    return true;
}

makefile

all:
    g++ -o convert_labels_hdf5 convert_labels_hdf5.cpp  -L/usr/lib -I/usr/include -lhdf5 -lhdf5_hl -lhdf5_cpp

查看生成的文件可以通过matlab,代码如下

label = h5read('filepath','/label')
版权声明:本文为博主原创文章,未经博主允许不得转载。

hdf5和las文件的读写

下面的的代码值关于Hdf5和las的读写和相互转化的函数,代码没有整理,可以参照改成自己所需要的形式。 #include #include #include #include "pointxyz...
  • hanshuobest
  • hanshuobest
  • 2016年09月13日 14:20
  • 959

HDF5 使用介绍

1、HDF5介绍 HDF 是用于存储和分发科学数据的一种自我描述、多对象文件格式。HDF 是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要。HDF 可以...
  • Mrhiuser
  • Mrhiuser
  • 2017年04月07日 18:52
  • 18735

编译出错:X11/extensions/XTest.h:没有那个文件或目录

x11keyfaker.cpp:48:34: 致命错误: X11/extensions/XTest.h:没有那个文件或目录 编译中断。 make: *** [.obj/release-shar...
  • ldl22847
  • ldl22847
  • 2014年01月29日 14:43
  • 3793

g++: 错误: –fpermissive:没有那个文件或目录

错误: host C++: libutils host C++: libutils g++: 错误: –fpermissive:没有那个文件或目录 make: *** [out/host/...
  • cuijianzhongswust
  • cuijianzhongswust
  • 2012年03月21日 10:34
  • 8202

编译caffe中的hdf5.cpp时发生错误

编译caffe中的hdf5.cpp时发生错误: 类似 error C2360: initialization of ‘pch’ is skipped by ‘case’ label: see ...
  • u012556077
  • u012556077
  • 2015年12月20日 12:50
  • 904

搭建caffe环境时“error: hdf5.h”找不到的解决方法

搭建caffe环境时,在最后进行 ”$make all” 操作时,报错找不到 “hdf5.h”,找了半天原因,是因为在安装 “hdf5” 的时候使用的指令是 “$ sudo apt-get libhd...
  • goofysong
  • goofysong
  • 2016年08月04日 09:45
  • 6810

centos 7 安装 redis desktop manager

centos7 下安装redis desktop manager
  • weixin_37939964
  • weixin_37939964
  • 2017年12月26日 17:09
  • 42

编译PC版vlc

编译环境: Ubuntu 16.04    64位       VLC的源码包在VLC的官网有,可以直接下载。也可以使用git来clone一个。 git的地址git clone git://git....
  • q7223124
  • q7223124
  • 2016年07月21日 14:58
  • 540

Caffe中HDF5Data例子

Caffe中HDF5Data例子
  • u011762313
  • u011762313
  • 2015年10月01日 23:44
  • 9835

caffe中HDF5层及数据生成

HDF 文件结构包括一个file id(文件号)、至少一个 data descriptor (数据描述符)、没有或多个 data element(数据内容)数据内容。 file id (文件号)是...
  • langb2014
  • langb2014
  • 2016年11月07日 13:06
  • 7454
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:caffe多标签装hdf5接口
举报原因:
原因补充:

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