【 Caffe C++】ubuntu下创建hdf5数据源解决多标签问题

2023-05-16

如何在ubuntu下为caffe创建HDF5数据源?

hdf5数据源示例

layer{
  name:"data"
  type:"HDF5Data"
  top:"data"
  top:"label"
  hdf5_data_parm{
    source:"examples/hdf5_classification/data/train.txt"
    batch_size:10
  }
}

### hdf5文件label的写法:
### 假设有三张人脸图片,要定位图片中人脸的眼睛、鼻子、嘴的位置
1.jpg 11 78 62 71 84 65 26 51 46 89
2.jpg 13 25 62 53 53 65 26 32 42 13
3.jpg 15 78 66 13 84 65 32 41 51 65

使用python生成数据源:

ipmort hdf5
import os
import cv2
import math
import numpy as np
import random
import re

root_path="/home/lichunlin/caffe_case/HDF5/image"

with open("/home/lichunlin/caffe_case/HDF5/hdf5.txt",'r') as f:
    lines=f.readlines()

num=len(lines)
random.shuffle(lines)

imgAccu = 0
imgs=np.zeros([num,3,224,224])
labels=np.zeros([num,10])
for i in range(num):
    line-lines[i]
    segments=re.split('\s+',line[:-1])
    print segments[0]
    img=cv2.imread(os.path.join(root_path,segments[0]))
    img=cv2.resize(img,(224,224))
    img=img.transpose(2,0,1) #opencv读到的数据是h*w*c,但是caffe的类型是c×h×w
				#h:heght  w:width  c:channel
    imgs[i,:,:,:]=img.astype(np.float32)	#把相应的数据存储到相应的位置
    
    for j in range(10):  #当图片的格式改了以后,相应的位置也发生了变化,得到新的位置
        labels[i,j]=float(segments[j+1]*224/256)

batchSize=1	#将大的文件分成好几个bathSize,一个bathSize存8000以下
batchNum=int(math.ceil(1.0*num/batchSize))

imgMean=int(math.ceil(1.0*num/batchSize))

imgMean=np.mean(imgs,axis=0)
#imgs=(imgs - ImgsMean)/255.0
labelsMean = np.
mean(labels,axis=0)
labels=(labels - labelsMean)/10

if os.path.exists('trainlist.txt'):
    os.remove('trainlist.txt')
if os.path.exists('testlist.txt'):
    os.remove('testlist.txt')
comp_kwargs={'compression':'gzip','compression_opts':1}
    start=i*batchSize
    end=min((i+1)*batchSize,num)
    if i<batchNum-1:
        filename='/home/lichunlin/caffe_case/HDF5/h5/train{0}.h5,format(i)'
    else:
        filename='/home/lichunlin/caffe_case/HDF5/h5/test{0}.h5,format(i-batchNum+1)'
    print filename
    with h5py.File(filename,'w') as f:
        f.create_dataset('data',data=np.array((imgs[start:end]-imgsMean)/225.0).astype(np.float32), **comp_kwargs)
        f.create_dataset('label',data=np.array(lables[start:end]).astype(np.float32),**comp_kwargs)
    if i<batchNum -1:
        with open('/home/lichunlin/caffe_case/HDF5/h5/trainlist.txt','a') as f:
            f.write(os.pathjoin(os.getcwd(),'train{0}.h5').format(i)+'\n')
    else:
        with open('/home/lichunlin/caffe_case/HDF5/h5/trainlist.txt','a') as f:
            f.write(os.pathjoin(os.getcwd(),'train{0}.h5').format(i-batchNum+1)+'\n')

imgsMean = np.mean(imgsMean,axis=(1,2))
with open('mean.txt','w') as f:
    f.write(str(imgsMean[0])+'\n'+str(imgsMean[1])+'\n'+str(imgsMean[2]))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【 Caffe C++】ubuntu下创建hdf5数据源解决多标签问题 的相关文章

  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • 在初始化脚本中切换用户?

    这是我的 Ubuntu 工作站上的初始化脚本 我需要以除 root 之外的其他用户身份运行命令 但我就是不知道应该如何完成它 两者都不sudo u or su newuser似乎有效 剧本 respawn console none star
  • 如何在 Caffe 中沿着通道分割 Blob

    我想在Caffe中分割Blob通道 这样我就可以分割一个Blob N c w h 分成两个大小相同的输出 Blob N c 2 w h 我上面描述的是非常笼统的 我实际上想做的是将一个两通道输入图像分离成两个不同的图像 一个进入卷积层 另一
  • 通过 Caffe 中的层提供数据的多种路径

    我想在 Caffe 中构建一个网络 其中传入的数据最初被分割 分别通过同一组层 最后使用 eltwise 层重新组合 此后 所有部件将作为一个斑点移动 除了学习的参数之外 数据并行移动的网络部分的层配置将是相同的 有没有一种方法可以在 Ca
  • 测试 hdf5/c++ 中的组是否存在

    我正在打开一个现有的 HDF5 文件来附加数据 我想向那个叫做的小组保证 A存在以供后续访问 我正在寻找一种简单的方法来创建 A有条件地 如果不存在则创建并返回新组 或者返回现有组 一种方法是测试 A存在 我怎样才能高效地做到这一点 根据
  • git 错误:无法处理 https

    当我尝试使用 git clone 时https xxx https xxx我收到以下错误我不处理协议 https 有人可以帮我吗 完整消息 dementrock dementrock A8Se git 克隆https git innosta
  • opencv_contrib编译错误:类没有成员

    我必须实现 SURF 算法来进行图像拼接 我在使用列出的库时遇到了问题here https stackoverflow com questions 33560251 opencv 3 0 0 ubuntu 14 04 nonfree non
  • 如何在 GNU/Linux 上设置 Subversion (SVN) 服务器 - Ubuntu [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一台运行 Ubuntu 的笔记本电脑 我想将其用作 Subversion 服务器 既让我自己在本地承诺 也让其他人远程承诺 要使其
  • Gearman,php 扩展问题:使用终端在 .. 中找不到类“GearmanWorker”,但可以在浏览器上使用

    我最近在 ubuntu 10 04 上安装了 gearman 并安装了它的 pecl 扩展 现在 当我在浏览器中运行一个 php 文件时 其中包含 client new GearmanWorker die var Dump client I
  • 为什么这个 JavaScript 可以在 Safari 上运行,但不能在 Firefox 上运行?

    我有 HTML 文件 我在 Safari 上尝试了该代码 运行良好 但是当我在 Firefox 上尝试这个时 它不起作用 任何人都可以建议如何使其在 Firefox 上工作吗 单击撤消按钮时 我想从 jsp 文件中检索内容 当我在 mac
  • uWSGI 皇帝权限被拒绝,除非 root

    我尝试使用二进制文件本身的标志 uid www data gid www data 并将其设置在我的配置中 uid www data gid www data 但套接字总是由我正在使用的帐户生成 因此我从 nginx 收到权限被拒绝的错误
  • 运行此处编译的 C 程序会导致在另一台服务器上找不到 GLIBC 库错误 - 是我的错还是他们的错?

    此处编译的 C 程序在我们的 Ubuntu 服务器上运行良好 但是当其他人尝试在他们的特定 Linux 服务器上运行它时 他们会收到以下错误 myprog install lib tls libc so 6 version GLIBC 2
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • OpenSSL 未签名证书静默

    遇到了麻烦 还有其他一些相关的帖子 但没有那么具体 我正在尝试为开发机器默默地生成证书 这些是我最初运行的命令 但被要求输入密码 openssl genrsa des3 out server key 1024 openssl req new
  • BASH 中的空函数

    我正在使用 FPM 工具创建 deb 包 此工具在从支持的文件中删除包之前 之后创建 不幸的是FPM生成的bash脚本包含这样的函数 dummy 该脚本退出时出现错误 语法错误 意外 BASH 不允许空函数吗 哪个版本的 bash linu
  • Eclipse Kepler 在 64 位 ubuntu 上冻结

    几天前我刚刚将 Ubuntu 升级到 14 04 并在此过程中从 32 位切换到 64 位 从那时起 Eclipse 就变得非常不稳定 运行几分钟后 它将开始随机冻结越来越长的时间 特别是在代码完成时 已经必须禁用它 而且在剪切 粘贴时 偶
  • 如何在 Java Gnome/GTK 程序中使用 Glade UI(.glade 文件)?

    我在 Internet 上进行了一项研究 寻找教程 文档来解释如何在 Java Gnome 项目中使用 Glade 中设计的 UI 但没有成功 我已经知道如何使用 Java Gnome GTK 从代码创建 UI 不管怎样 我想使用我在 Ja
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 在 Dockerfile 中切换到 root 用户

    我运行了这个命令 docker pull mcr microsoft com mssql server 2019 latest 然后我创建了一个 dockerfile 来使用此容器映像作为另一个容器的基础映像 escape FROM mcr
  • PostgreSQL docker:“无法绑定 IPv6 套接字:无法分配请求的地址”

    编辑2 经过很长一段时间 解决了 请参阅下面的答案 编辑 我很遗憾地说 从昨天到今天 问题 自行 消失了 而我没有做任何事情 在这里学习很棒的非确定性课程 额外的乐趣 无法绑定 IPv6 套接字 错误仍然出现在错误日志中 因此这可能根本不是

随机推荐