проблемы при использовании caffe (create_imagenet.sh) для преобразования моего jpg в lmdb

Я хочу сделать тонкую настройку, чтобы обучить свой jpg. Руководствуясь многими документами, я в основном изменил путь к данным, txt и инструменту в create_imagenet.sh следующим образом:

#!/usr/bin/env sh
# This script converts the mnist data into lmdb/leveldb format,
# depending on the value assigned to $BACKEND.
set -e

EXAMPLE=/home/sun/Documents/python/fine-tuning/Oxford102/data/test
DATA_TEST=/home/sun/Documents/python/fine-tuning/Oxford102/data/test/test/
DATA_TRAIN=/home/sun/Documents/python/fine-tuning/Oxford102/data/test/train/
NOTI=/home/sun/Documents/python/fine-tuning/Oxford102/data/test
BUILD=/home/sun/Documents/caffe/build/tools

#BACKEND="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=256  
  RESIZE_WIDTH=256  
else  
  RESIZE_HEIGHT=0  
  RESIZE_WIDTH=0  
fi  


if [ ! -d "$DATA_TRAIN" ]; then  
  echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $DATA_TRAIN"  
  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 "$DATA_TEST" ]; then  
  echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $DATA_TEST"  
  echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \  
       "where the ImageNet training data is stored."  
  exit 1  
fi  

echo "Creating train lmdb..."
GLOG_logtostderr=1 $BUILD/convert_imageset \
    --resize_height=$RESIZE_HEIGHT \ 
    --resize_width=$RESIZE_WIDTH \
    --shuffle \
    $DATA_TRAIN \  
    $NOTI/info_train.txt \  
    $EXAMPLE/img_train_lmdb  

echo "Creating test lmdb..."
GLOG_logtostderr=1 $BUILD/convert_imageset \
    --resize_height=$RESIZE_HEIGHT \ 
    --resize_width=$RESIZE_WIDTH \
    --shuffle \
    $DATA_TEST \  
    $NOTI/info_test.txt \  
    $EXAMPLE/img_test_lmdb

echo "Done."

Затем я запускаю «sudo sh create_oxford.sh» в терминале, но ничего не получаю.

выполнение результата в оболочке

Кроме того, моя структура документа выглядит следующим образом:

в /home/sun/Documents/python/fine-tuning/Oxford102/data/test я поместил info_test.txt, info_train.txt, test(jpg для теста) и train(jpg для поезда). В txt информация типа "image_0001.jpg 0".


person goldentime    schedule 01.06.2018    source источник


Ответы (1)


1) Я успешно запустил код.

2) Я получаю информацию об использовании и ничего, когда аргументы командной строки передаются неправильно.

3) Вы можете отлаживать свой сценарий оболочки, используя: set -vx Он покажет фактические аргументы следующим образом:

+/home/u5652/.conda/envs/riCffAlex3.6/bin/convert_imageset --resize_height=256 --resize_width=256

convert_imageset: Преобразование набора изображений в формат leveldb/lmdb, используемый в качестве входных данных для Caffe. Использование: convert_imageset [FLAGS] КОРНЕВАЯ ПАПКА/LISTFILE DB_NAME ......................

Согласно caffe/tools/convert_imageset.cpp:

if (argc < 4) {
    gflags::ShowUsageWithFlagsRestrict(argv[0], "tools/convert_imageset");
    return 1;
  }

минимальное количество аргументов должно быть 4, иначе будет показано использование. Должно быть, вы получали информацию об использовании и ничего из-за неверных аргументов.

4) Я запустил следующий код и успешно создал lmdb:

#!/usr/bin/env sh
set -vx
EXAMPLE=examples/imagenet/test
DATA=data/ilsvrc12/test
TOOLS=~/.conda/envs/riCffAlex3.6/bin
TRAIN_DATA_ROOT=~/caffe/data/ilsvrc12/test/train/
VAL_DATA_ROOT=~/caffe/data/ilsvrc12/test/test/

RESIZE=true
if $RESIZE; then
  RESIZE_HEIGHT=256
  RESIZE_WIDTH=256
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/train_lmdb

echo "Creating test lmdb..."

GLOG_logtostderr=1 $TOOLS/convert_imageset \
    --resize_height=$RESIZE_HEIGHT \
    --resize_width=$RESIZE_WIDTH \
    --shuffle \
    $VAL_DATA_ROOT \
    $DATA/val.txt \
    $EXAMPLE/test_lmdb

echo "Done."

5) Я помещаю детали в том же формате, что и вы в файлах .txt. Я поставил: TestJpg.jpg 0

ПРИМЕЧАНИЕ. Изображение должно иметь то же имя и расширение, что и в .txt.

Попробуйте способ. Ваша ошибка должна быть устранена.

Спасибо

person Rishabh Kumar Jain - Intel    schedule 06.06.2018
comment
большое спасибо! Я решил проблему, отменив «\» и поместив все параметры в одну строку. Кажется, \ не действует как команда подключения на моей машине. - person goldentime; 24.06.2018