caffe报错:Check failed: width <= datum_width (28 vs. 17)

  使用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."

由于作者水平有限,如有错误,请在下方评论区指正,谢谢!

猜你喜欢

转载自blog.csdn.net/gls_nuaa/article/details/107594071