在使用Caffe进行训练且不使用lmdb文件时,需要为训练和验证输入文件提供列表文件。通常这两个列表文件被命名为train.txt和val.txt。它们的结构相同,如下所示:
/path/to/a/file.jpg 0/path/to/another/file.jpg 0.../path/to/another/file.jpg M/path/to/another/file.jpg M.../path/to/another/file.jpg N/path/to/another/file.jpg N
用于N+1个类别的集合。
然后在train_val.prototxt中,train.txt和val.txt分别在TRAIN阶段和TEST阶段的段落中被引用。
我的问题是:train.txt和val.txt是否应该按类别编号排序(即按数字第二字段排序)?
提问的原因:在示例中,文件总是按类别编号排序。如果我随机排序train.txt和val.txt文件,训练不会中断——caffe.bin不会崩溃或报告警告。另一方面,我不知道caffe是否按行顺序读取train.txt和val.txt,或者是否对它们进行随机抽样。
回答:
Caffe支持按行顺序或打乱顺序:https://github.com/BVLC/caffe/blob/2a1c552b66f026c7508d390b526f2495ed3be594/src/caffe/layers/image_data_layer.cpp#L51
要启用打乱顺序,需要在ImageDataLayer
中添加shuffle: true
参数(https://github.com/BVLC/caffe/blob/2a1c552b66f026c7508d390b526f2495ed3be594/src/caffe/proto/caffe.proto#L810)