我正在尝试创建2个lmdbs。一个用于我的图片,一个用于我的标签。我想确定图片的角度,为此我试图估计水平和垂直角度。我有类似:0-10度水平10-20度horiozntal等。垂直角度也是如此。现在我不知道如何创建标签数据库,因为标签必须在lmdb中进行格式化。 我有一个.txt
列表文件与:/path/pic.png 1 32
条目,其中1
意味着10-20度和32
意味着320-330度。 我的代码如下所示:为多标签分类创建lmdb
for line in fileinput.input(data):
entries = re.split(' ', line.strip())
images.append(entries[0])
labels.append(entries[1:])
....
for in_idx, (image, label) in enumerate(inputs):
im = cv2.imread(image)
im = im[:,:,::-1]
im = im.transpose((2,0,1))
im_dat = caffe.io.array_to_datum(im)
print im_dat
images_txn.put('{:0>10d}'.format(in_idx), im_dat.SerializeToString())
label = np.array(label).astype(int).reshape(1, 1, len(label))
label_dat = caffe.io.array_to_datum(label)
labels_txn.put('{:0>10d}'.format(in_idx), label_dat.SerializeToString())
然而,这似乎不是,因为我想对网络进行训练时,得到了下面的错误是正确的:
检查失败:outer_num_ * inner_num_ ==底部[1 ] - > count()(10对20)标签数量必须与预测数量相匹配;例如,如果softmax轴== 1且预测形状为(N,C,H,W),则标签计数(标签数量)必须为N,其中整数值在{0,1,..., C-1}。
我的数据层是这样的:
name: "LearnAngle"
layer {
name: "data"
type: "Data"
top: "images"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 256
mean_file: "/path/mean_train.binaryproto"
}
data_param {
source: "path/train2_images_lmdb"
batch_size: 10
backend: LMDB
}
}
layer {
name: "data_label"
type: "Data"
top: "labels"
include {
phase: TRAIN
}
data_param {
source: "path/train2_labels_lmdb"
batch_size: 10
backend: LMDB
}
}
我最后一层貌似
layer {
name: "fc8"
type: "InnerProduct"
bottom: "fc7"
top: "fc8"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
inner_product_param {
num_output: 36
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "fc8"
bottom: "labels"
top: "loss"
}
你能还上载了数据层? – Dale
完成! @DaleSong – thigi