• 已经准备好train.txt, test.txt文件, 格式如下
    caffe 根据txt生成多标签LMDB数据

此处有坑, 如果是windows下生成txt, 换行符为rn, 需要替换成 n才能在linux运行.
可以使用sed -i "s/s*$//g" filename统一去掉, 具体参考除去文件中显示的^M符号


2. 编辑生成lmdb用的txt2lmdb.sh

以下是我的sh文件:

#!/usr/bin/env sh
# Create the imagenet lmdb inputs
 
####################################################
# 配置
####################################################
EXAMPLE=/home/zhuoshi/ZSZT/Geoffrey/Person-resnet18/lmdb_data		# lmdb存储位置
DATA=/home/zhuoshi/ZSZT/Geoffrey/Person-resnet18/data					# txt文件所在文件夹 - 同时也是.txt相对路径的起始点(图片绝对路径=$DATA+txt中相对路径)
CAFFE_HOME=/home/zhuoshi/ZSZT/Geoffrey/caffe/caffe-master          		# caffe的工具库
HEIGHT=256
WIDTH=256
####################################################
# 处理train
####################################################
echo "Creating train lmdb..."
TRAIN_PATH=$EXAMPLE/img_train_lmdb
# 如果存在,删除原数据
if [ ! -d "$TRAIN_PATH/" ];then
	echo "文件不存在"
	mkdir -p $TRAIN_PATH/
else
	echo "$TRAIN_PATH文件夹已存在"
	rm -rf $TRAIN_PATH/
	# mkdir -p $TRAIN_PATH/
fi
# 生成lmdb
$CAFFE_HOME/build/tools/convert_imageset --shuffle --resize_height=$HEIGHT --resize_width=$WIDTH  $DATA/  $DATA/train.txt  $TRAIN_PATH  # 
echo "Creating train lmdb Done!, Create mean.binaryproto..."
# # 计算图片均值
$CAFFE_HOME/build/tools/compute_image_mean $TRAIN_PATH/ $TRAIN_PATH/mean.binaryproto
echo "train Done!"

####################################################
# 处理test
####################################################
echo "Creating test lmdb ..."
TEST_PATH=$EXAMPLE/img_test_lmdb
# 如果存在,删除原数据
if [ ! -d "$TEST_PATH/" ];then
	echo "文件不存在"
	mkdir $TEST_PATH
else
	echo "$TEST_PATH文件夹已存在"
	rm -rf $TEST_PATH/
	# mkdir $TEST_PATH/
fi
# 生成lmdb
$CAFFE_HOME/build/tools/convert_imageset --shuffle --resize_height=256 --resize_width=256  $DATA/  $DATA/test.txt  $TEST_PATH  # 
echo "Creating test lmdb Done!, Create mean.binaryproto..."
# # 计算图片均值
$CAFFE_HOME/build/tools/compute_image_mean $TEST_PATH/ $TEST_PATH/mean.binaryproto
echo "test Done!"

####################################################
echo "Done."

其中:

  • EXAMPLE, 把生成的lmdb存储到什么位置
  • DATA .txt存放绝对路径, 同时也是父目录, 即图片绝对路径=$DATA+txt中相对路径:

我的txt路径:
caffe 根据txt生成多标签LMDB数据
txt图片相对路径:
caffe 根据txt生成多标签LMDB数据

3. 运行

执行`sh txt2lmdb.sh`, (txt2lmdb.sh为脚本所在路径)

caffe 根据txt生成多标签LMDB数据

脚本会在$EXAMPLE下生成如下结果: 

caffe 根据txt生成多标签LMDB数据


下面记录一下caffe自带的均值转换工具compute_image_mean.cpp参数:

$CAFFE_HOME/build/tools/compute_image_mean $TEST_PATH/ $TEST_PATH/mean.binaryproto

带两个参数:

  • 第一个参数:$TEST_PATH/, 表示需要计算均值的数据,格式为lmdb的训练数据。
  • 第二个参数:$TEST_PATH/mean.binaryproto, 计算出来的结果保存文件。

( 图片减去均值后,再进行训练和测试,会提高速度和精度。)