Neural network 在caffe中从lmdb数据库读取编码图像数据
我对使用caffe比较陌生,我正在尝试创建可以(稍后)调整的最小工作示例。我在使用caffe的例子和MNIST数据时没有遇到任何困难。我下载了图像网络数据(ILSVRC12),并使用caffe的工具将其转换为lmdb数据库,使用:Neural network 在caffe中从lmdb数据库读取编码图像数据,neural-network,deep-learning,caffe,lmdb,Neural Network,Deep Learning,Caffe,Lmdb,我对使用caffe比较陌生,我正在尝试创建可以(稍后)调整的最小工作示例。我在使用caffe的例子和MNIST数据时没有遇到任何困难。我下载了图像网络数据(ILSVRC12),并使用caffe的工具将其转换为lmdb数据库,使用: $CAFFE_ROOT/build/install/bin/convert_imageset -shuffle -encoded=true top_level_data_dir/ fileNames.txt lmdb_name 创建包含编码(jpeg)图像数据的lm
$CAFFE_ROOT/build/install/bin/convert_imageset -shuffle -encoded=true top_level_data_dir/ fileNames.txt lmdb_name
创建包含编码(jpeg)图像数据的lmdb。这是因为编码的lmdb约为64GB,而未编码的lmdb约为240GB
我的.prototxt文件描述的网络是最小的(一对内部产品层,主要是从MNIST示例中借用的——这里不考虑准确性,我只想让它工作)
当列车lmdb未编码时,此.prototxt文件工作正常(精度极低,但caffe不会崩溃)。但是,如果对列车lmdb进行编码,则会出现以下错误:
data_transformer.cpp:239] Check failed: channels == img_channels (3 vs. 1)
问题:是否必须在.prototxt文件中设置一些“标志”来指示列车lmdb已编码?(可能必须为测试数据层test lmdb提供相同的标志。)
一点研究:
通过谷歌搜索,我发现了一个似乎很有前途的网站。但是,将'force\u encoded\u color'
设置为true并没有解决我的问题
我还发现答案对创建lmdb非常有用(特别是启用编码的说明),但是,没有提到应该做什么,以便caffe知道图像已编码。您收到的错误消息: 表示caffe数据转换器期望输入3个
通道(即彩色图像),但仅获得1个img_通道(即灰度图像)
看起来您应该在转换参数设置参数:
layer {
name: "imagenet"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
scale: 0.00390625
force_color: true ## try this
}
data_param {
source: "train-lmdb"
batch_size: 100
backend: LMDB
force_encoded_color: true ## cannot hurt...
}
}
这似乎有效!这是否意味着数据中混入了一些灰度图像?我认为/假设它们都是彩色的(我看到的那一把肯定是彩色的)。如果我在创建lmdb时使用--check_size选项,可能会发现这个问题?我之前已将所有图像的大小调整为256x256,因此我不必进行检查。@TravisJ我不确定--check_size
检查通道数,因为它只检查宽度和高度,但我可能对此有误。我假设大小为宽度x高度x深度(即通道数)。。。但我可能错了。。。对caffe来说非常陌生。
data_transformer.cpp:239] Check failed: channels == img_channels (3 vs. 1)
layer {
name: "imagenet"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
scale: 0.00390625
force_color: true ## try this
}
data_param {
source: "train-lmdb"
batch_size: 100
backend: LMDB
force_encoded_color: true ## cannot hurt...
}
}