使用Python製作Caffe的資料來源hdf5

2021-08-21 23:52:54 字數 3558 閱讀 8667

把所要進行回歸的caffe影象放在/home/pcb/caffe/examples/caffe_datamaker_hdh5資料夾的image資料夾中,然後有乙個hdf5.txt,文件中的第一列為影象的名稱,後面的是影象5個特徵的位置(這裡的5個特徵只是舉個栗子,或許有別的吧,只是這個txt怎麼生成還不知道,如果影象多的話肯定要寫程式的,後面會繼續更新的!),具體如下圖所示:

然後生成hdf5的python的程式如下所示:

# -*- coding: utf-8 -*-

'''hdf5資料來源

'''import math

import numpy as np

import random

import re

import os

import h5py

import cv2

#路徑root_path = '/home/pcb/caffe/examples/caffe_datamaker_hdh5/image'

with open('/home/pcb/caffe/examples/caffe_datamaker_hdh5/hdf5.txt','r') as f:

lins = f.readlines()

num = len(lins) #資料長度

random.shuffle(lins) #把資料洗牌

imgaccu = 0

#輸入# #製作data,造乙個224*224*3*個數的矩陣

imgs = np.zeros([num , 3 , 224 ,224])

# 製作label,造乙個10(每個影象的標籤數)×個數的矩陣

labels = np.zeros([num , 10])

for i in range(num):

line = lins[i]

#使用正規表示式把串給分割開來,取第乙個的名字 \s就是乙個回車或者空格

segment = re.split('\s+',line)

#找到image = cv2.imread(os.path.join(root_path , segment[0]))

#把進行縮小 把縮小到224 輸入的大小就是224x224的

image = cv2.resize(image , (224,224))

#普通輸入是h w c 而caffe要求是c h w,所以要轉回來

image = image.transpose(2 , 0 , 1)

#轉型別,float32

#把資料都存在imge裡面

imgs[i , : , : , :] = image.astype(np.float32)

#因為縮小了,所以要吧label也要縮小

for j in range(10):

labels[i , j] = float(segment[j + 1])*224/256

#每個hdf5檔案裡存放的個數,一般每個.h5裡面放8000個

#這裡就3個,每個.h5裡面放乙個

batchsize = 1

#取多少次

batchnum = int(math.ceil(1.0 * num/batchsize))

#減去均值操作,目的是以0為中心化

#在初始階段減去均值後,最後**的時候要加上

imgsmean = np.mean(imgs , axis = 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 =

for i in range(batchnum):

start = i * batchsize

end = min((i+1)*batchsize , num)

#前面的幾個bacthsize做為乙個訓練資料

if i < batchnum - 1:

filename = '/home/pcb/caffe/examples/caffe_datamaker_hdh5/h5/train.h5'.format(i)

#後面的乙個作為測試集

else:

filename = '/home/pcb/caffe/examples/caffe_datamaker_hdh5/h5/test.h5'.format(i - batchnum + 1)

#往h5檔案裡面新增進資料

with h5py.file(filename , 'w') as f:

f.create_dataset('data' , data=np.array((imgs[start : end] - imgsmean)/255.0).astype(np.float32) , **comp_kwargs)

f.create_dataset('label' , data=np.array(labels[start : end]).astype(np.float32) , **comp_kwargs)

pass

if i < batchnum - 1:

with open('/home/pcb/caffe/examples/caffe_datamaker_hdh5/h5/trainlist.txt' , 'a') as f:

f.write(("/home/pcb/caffe/examples/caffe_datamaker_hdh5/h5/train.h5").format(i) + '\n')

else:

with open('/home/pcb/caffe/examples/caffe_datamaker_hdh5/h5/testlist.txt' , 'a') as f:

f.write(("/home/pcb/caffe/examples/caffe_datamaker_hdh5/h5/test.h5").format(i - batchnum + 1) + '\n')

這樣就會在caffe_datamaker_hdh5資料夾下h5生成以下幾個檔案:

trainlist.txt裡面為train0.h5和train1.h5的路徑,如下圖所示:

testlist.txt裡面為test0.h的路徑,如下圖所示:

然後把所要使用的hdf5資料層的source路徑設為trainlist所在的路徑即可。

使用caffe製作自己的lmdb資料集

新鳥最近在一家半導體公司實習,接觸到的專案都是基於 caffe框架的深度學習方面的知識,前期對tensorflow比較熟,但是到了公司沒辦法啊!不會怎麼辦,只能硬著頭皮上啊!中途碰壁不少,寫這篇部落格只是想以後方便查閱資料,另外一方面是給同樣在深度學習裡面摸爬滾打的朋友乙個參考吧!公司提供的資料都是...

Caffe中使用HDF5製作多標籤資料

在caffe中,如果使用lmdb資料格式的話,預設是只支援 影象 整數單標籤 這種形式的資料的。如果訓練網路需要一些其他形式的資料或標籤 如浮點資料,多標籤等等 可以將其製作成hdf5格式。ps hdf5資料格式比較靈活,但缺點是占用空間較大。筆者曾經試著把229多張512x512的影象製作成乙個h...

Caffe使用教程

by shicai yang 星空下的巫師 on 2015 08 06 include caffe caffe.hpp include include using namespace caffe char proto h models caffe deploy.prototxt 載入caffenet...