gpt4 book ai didi

neural-network - 如何从图像目录中为 siamese 网络创建 CaffeDB 训练数据

转载 作者:行者123 更新时间:2023-12-03 22:41:37 25 4
gpt4 key购买 nike

我需要一些帮助才能从带有图像和标签文本文件的普通目录中为 siamese CNN 创建 CaffeDB。最好是用 python 的方式来做到这一点。
问题不是遍历目录并制作成对的图像。我的问题更多是从这些对中制作 CaffeDB。
到目前为止我只用过 convert_imageset 从图像目录中创建 CaffeDB。
感谢帮助!

最佳答案

为什么不简单地使用旧的 convert_imagest 制作两个数据集? ?

layer {
name: "data_a"
top: "data_a"
top: "label_a"
type: "Data"
data_param { source: "/path/to/first/data_lmdb" }
...
}
layer {
name: "data_b"
top: "data_b"
top: "label_b"
type: "Data"
data_param { source: "/path/to/second/data_lmdb" }
...
}

至于损失,因为每个例子都有一个类标签,你需要转换 label_alabel_bsame_not_same_label .我建议您使用 python 层“即时”执行此操作。在 prototxt添加对python层的调用:
layer {
name: "a_b_to_same_not_same_label"
type: "Python"
bottom: "label_a"
bottom: "label_b"
top: "same_not_same_label"
python_param {
# the module name -- usually the filename -- that needs to be in $PYTHONPATH
module: "siamese"
# the layer name -- the class name in the module
layer: "SiameseLabels"
}
propagate_down: false
}

创建 siamese.py (确保它在您的 $PYTHONPATH 中)。在 siamese.py你应该有图层类:
import sys, os
sys.path.insert(0,os.environ['CAFFE_ROOT'] + '/python')
import caffe
class SiameseLabels(caffe.Layer):
def setup(self, bottom, top):
if len(bottom) != 2:
raise Exception('must have exactly two inputs')
if len(top) != 1:
raise Exception('must have exactly one output')
def reshape(self,bottom,top):
top[0].reshape( *bottom[0].shape )
def forward(self,bottom,top):
top[0].data[...] = (bottom[0].data == bottom[1].data).astype('f4')
def backward(self,top,propagate_down,bottom):
# no back prop
pass

确保以不同的方式对两组中的示例进行混洗,以便获得非平凡的对。此外,如果您使用不同数量的示例构建第一个和第二个数据集,那么您将在每个时期看到不同的对;)

确保您构建的网络共享重复层的权重,请参阅 this tutorial想要查询更多的信息。

关于neural-network - 如何从图像目录中为 siamese 网络创建 CaffeDB 训练数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34903975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com