当在train_val.prototxt中使用ImageData类型字段时,GoogleNet无法读取图像

时间:2015-06-24 13:52:36

标签: computer-vision deep-learning caffe

我正在尝试使用caffe的GoogleNet实施。我想根据文本文件中的文件和标签列表训练深层网络,但问题是,当我训练深层网络时,它无法读取文件。

这是train_val.prototxt定义,我使用ImageData而不是使用带有' Data'的大型LMDB文件。型

name: "GoogleNet"
layer 
  {
  name: "data"
  type: "ImageData"
  top: "data"
  top: "label"
  include {
  phase: TRAIN
 }
 transform_param 
 {
 mirror: true
 crop_size: 224
 mean_value: 104
 mean_value: 117
 mean_value: 123
 }
 data_param 
 {
  source: "path_to_file/file_paths_and_labels.txt"
  batch_size: 32
 }
}  

在这里,我使用了ImageData类型作为googlenet,而不是按照此处的建议键入数据:LMDB files and how they are used for caffe deep learning network

所以,我有文本文件(file_paths_and_labels.txt),其中每行包含以下内容:

path_to_image label

图像的路径是图像的地址,标签是图像的标签(有10种不同的标签)。

我想确切地知道我错在哪里,因为当我运行深度网络训练命令时

./build/tools/caffe train --solver=/my_home/dl-caffe/models/bvlc_googlenet/solver.prototxt 

我有以下错误:

I0624 10:36:11.524896 15246 layer_factory.hpp:74] Creating layer data
I0624 10:36:11.524960 15246 net.cpp:84] Creating Layer data
I0624 10:36:11.524988 15246 net.cpp:338] data -> data
I0624 10:36:11.525046 15246 net.cpp:338] data -> label
I0624 10:36:11.525084 15246 net.cpp:113] Setting up data
I0624 10:36:11.525106 15246 image_data_layer.cpp:36] Opening file 
I0624 10:36:11.525146 15246 image_data_layer.cpp:51] A total of 0 images.
*** Aborted at 1435152971 (unix time) try "date -d @1435152971" if you   are using GNU date ***
PC: @     0x7f7060b70ee0 (unknown)
*** SIGSEGV (@0x0) received by PID 15246 (TID 0x7f706188aa40) from PID   0; stack trace: ***
@     0x7f7060511d40 (unknown)
@     0x7f7060b70ee0 (unknown)
@     0x7f706118587c std::operator+<>()
@     0x7f70611861e5 caffe::ImageDataLayer<>::DataLayerSetUp()
@     0x7f7061144ac6 caffe::BaseDataLayer<>::LayerSetUp()
@     0x7f7061144bc9 caffe::BasePrefetchingDataLayer<>::LayerSetUp()
@     0x7f70611d8ff2 caffe::Net<>::Init()
@     0x7f70611daab2 caffe::Net<>::Net()
@     0x7f70611e6c10 caffe::Solver<>::InitTrainNet()
@     0x7f70611e7d23 caffe::Solver<>::Init()
@     0x7f70611e7ef6 caffe::Solver<>::Solver()
@           0x40c4a0 caffe::GetSolver<>()
@           0x406471 train()
@           0x404a11 main
@     0x7f70604fcec5 (unknown)
@           0x404fbd (unknown)
Segmentation fault (core dumped)

我认为GoogleNet没有在我的文本文件中查找数据。问题是什么?我的train_val.prototxt文件的语法?

2 个答案:

答案 0 :(得分:8)

您使用错误的参数指定源。对于IMAGE_DATA,您需要使用 image_data_param 而不是 data_param 。因为您在data_param中指定了源,而ImageDataLayer查看了image_data_param,所以source的值是空字符串。您可以在此处的日志中看到:

I0624 10:36:11.525106 15246 image_data_layer.cpp:36] Opening file 

此行的格式应为:

Opening file <filename>

在您的日志中,&#34;打开文件&#34;后面有空格。

答案 1 :(得分:0)

我对将来降落的人有所帮助。
我遇到了同样的问题,但是我正在加载来自leveldb文件的图像 当我将在计算机 A 上生成的leveldb文件复制到另一台计算机 B 并尝试在 B 。 通过在机器 B 上再次重新生成leveldb文件,解决了该问题。

顺便说一句。可能有人知道为什么生成leveldb的机器会产生什么问题?