把所要進行回歸的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...