使用caffe建立模型的时候需要转换LMDB格式,但转换完成进行训练的时候却会报错Check failed。这个错误的原因是图片大小不匹配。在之前我一直以为在转换之前要把所有图片大小转换为目标尺寸,于是自己写了一个脚本把所有图片大小转换。但还是有纰漏的地方,今天发现一个更好的方法,记录下来!
其实也很简单:就是把大小修改放在转换lmdb的脚本中,在脚本中添加如下语句:
RESIZE=true
if $RESIZE; then
RESIZE_HEIGHT=28
RESIZE_WIDTH=28
else
RESIZE_HEIGHT=0
RESIZE_WIDTH=0
fi
再把下面训练集和测试集resize_height和resize_width参数换成上文的变量即可。
GLOG_logtostderr=1 $TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$TRAIN_DATA_ROOT \
$DATA/train.txt \
$EXAMPLE/TibetanWord_train_lmdb
发现了这个方法,觉得以前憨憨的。以后就用这个啦!
文末附完整代码:
#!/usr/bin/env sh
# Create the imagenet lmdb inputs
# N.B. set the path to the imagenet train + val data dirs
set -e
EXAMPLE=examples/TibetanWord
DATA=examples/TibetanWord
TOOLS=build/tools
#TRAIN_DATA_ROOT=/home/user/caffe/examples/TibetanWord/train/
TRAIN_DATA_ROOT=examples/TibetanWord/
#VAL_DATA_ROOT=/home/user/caffe/examples/TibetanWord/test/
VAL_DATA_ROOT=examples/TibetanWord/
rm -rf $EXAMPLE/TibetanWord_train_lmdb
rm -rf $EXAMPLE/TibetanWord_test_lmdb
# Set RESIZE=true to resize the images to 256x256. Leave as false if images have
# already been resized using another tool.
RESIZE=true
if $RESIZE; then
RESIZE_HEIGHT=28
RESIZE_WIDTH=28
else
RESIZE_HEIGHT=0
RESIZE_WIDTH=0
fi
if [ ! -d "$TRAIN_DATA_ROOT" ]; then
echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"
echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \
"where the ImageNet training data is stored."
exit 1
fi
if [ ! -d "$VAL_DATA_ROOT" ]; then
echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"
echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \
"where the ImageNet validation data is stored."
exit 1
fi
echo "Creating train lmdb..."
GLOG_logtostderr=1 $TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$TRAIN_DATA_ROOT \
$DATA/train.txt \
$EXAMPLE/TibetanWord_train_lmdb
echo "train finish"
echo "Creating val lmdb..."
GLOG_logtostderr=1 $TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$VAL_DATA_ROOT \
$DATA/test.txt \
$EXAMPLE/TibetanWord_test_lmdb
echo "Done."
由于作者水平有限,如有错误,请在下方评论区指正,谢谢!