-1

I am trying to design a network that takes an IMAGE (224x224x3) and 3 parameters (X,Y,R) learns the relation.

My input is an HDF5 dataset. I am getting the following error:

"Creating Layer conv1 I0612 17:17:38.315083 9991 net.cpp:406] conv1 <- data I0612 17:17:38.315107 9991 net.cpp:380] conv1 -> conv1 F0612 17:17:38.352540 9991 blob.cpp:32] Check failed: shape[i] >= 0 (-1 vs. 0) "

I have created an HDF5 dataset for input to caffe. My create_dataset code is as follows:-

import h5py, os
import caffe
import numpy as np

SIZE = 224
with open( 'val.txt', 'r' ) as T :
    lines = T.readlines()


count_files = 0
split_after = 199
count = -1

# If you do not have enough memory split data into
# multiple batches and generate multiple separate h5 files
data = np.zeros( (split_after,SIZE, SIZE,3), dtype='f4' )
label = np.zeros( (split_after,3, 1), dtype='f4' )

for i,l in enumerate(lines):
    count += 1
    sp = l.split(' ')
    img = caffe.io.load_image( sp[0] )
    data[count] = img
    label[count][0] = float(sp[1])
    label[count][1] = float(sp[2])
    label[count][2] = float(sp[3])
    #print y1[count]
    if (count+1) == split_after:
    with h5py.File('val_' + str(count_files) +  '.h5','w') as H:
        H.create_dataset( 'data', data=data ) # note the name X given to the dataset!
        H.create_dataset( 'label', data=label )
        data = np.zeros( (split_after, SIZE, SIZE, 3), dtype='f4' )
        label = np.zeros( (split_after,3, 1), dtype='f4' )
    with open('val1.txt','a') as L:
        L.write( 'val_' + str(count_files) + '.h5') # list all h5 files you are going to use
    count_files += 1
    count = 0

I am creating a data (224,224,3) field and a label (3,1) in the HDF5 dataset.

Now my caffe model is as follows:

name: "CaffeNet"
layer {
  name: "data"
  type: "HDF5Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  hdf5_data_param {
    source: "/home/arijit/Downloads/caffe/Circle/test1.txt"
    batch_size: 256
    shuffle: true
  }
}
layer {
  name: "data"
  type: "HDF5Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  hdf5_data_param {
    source: "/home/arijit/Downloads/caffe/Circle/val1.txt"
    batch_size: 16
  }
}
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 96
    kernel_size: 11
    stride: 4
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "relu1"
  type: "ReLU"
  bottom: "conv1"
  top: "conv1"
}
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}
layer {
  name: "norm1"
  type: "LRN"
  bottom: "pool1"
  top: "norm1"
  lrn_param {
    local_size: 5
    alpha: 0.0001
    beta: 0.75
  }
}
layer {
  name: "conv2"
  type: "Convolution"
  bottom: "norm1"
  top: "conv2"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 256
    pad: 2
    kernel_size: 5
    group: 2
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 1
    }
  }
}
layer {
  name: "relu2"
  type: "ReLU"
  bottom: "conv2"
  top: "conv2"
}
layer {
  name: "pool2"
  type: "Pooling"
  bottom: "conv2"
  top: "pool2"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}
layer {
  name: "norm2"
  type: "LRN"
  bottom: "pool2"
  top: "norm2"
  lrn_param {
    local_size: 5
    alpha: 0.0001
    beta: 0.75
  }
}
layer {
  name: "conv3"
  type: "Convolution"
  bottom: "norm2"
  top: "conv3"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 384
    pad: 1
    kernel_size: 3
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "relu3"
  type: "ReLU"
  bottom: "conv3"
  top: "conv3"
}
layer {
  name: "conv4"
  type: "Convolution"
  bottom: "conv3"
  top: "conv4"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 384
    pad: 1
    kernel_size: 3
    group: 2
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 1
    }
  }
}
layer {
  name: "relu4"
  type: "ReLU"
  bottom: "conv4"
  top: "conv4"
}
layer {
  name: "conv5"
  type: "Convolution"
  bottom: "conv4"
  top: "conv5"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 256
    pad: 1
    kernel_size: 3
    group: 2
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 1
    }
  }
}
layer {
  name: "relu5"
  type: "ReLU"
  bottom: "conv5"
  top: "conv5"
}
layer {
  name: "pool5"
  type: "Pooling"
  bottom: "conv5"
  top: "pool5"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}
layer {
  name: "fc6"
  type: "InnerProduct"
  bottom: "pool5"
  top: "fc6"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  inner_product_param {
    num_output: 4096
    weight_filler {
      type: "gaussian"
      std: 0.005
    }
    bias_filler {
      type: "constant"
      value: 1
    }
  }
}
layer {
  name: "relu6"
  type: "ReLU"
  bottom: "fc6"
  top: "fc6"
}
layer {
  name: "drop6"
  type: "Dropout"
  bottom: "fc6"
  top: "fc6"
  dropout_param {
    dropout_ratio: 0.5
  }
}
layer {
  name: "fc7"
  type: "InnerProduct"
  bottom: "fc6"
  top: "fc7"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  inner_product_param {
    num_output: 4096
    weight_filler {
      type: "gaussian"
      std: 0.005
    }
    bias_filler {
      type: "constant"
      value: 1
    }
  }
}
layer {
  name: "relu7"
  type: "ReLU"
  bottom: "fc7"
  top: "fc7"
}
layer {
  name: "drop7"
  type: "Dropout"
  bottom: "fc7"
  top: "fc7"
  dropout_param {
    dropout_ratio: 0.5
  }
}
layer {
  name: "fc8ft"
  type: "InnerProduct"
  bottom: "fc7"
  top: "fc8ft"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  inner_product_param {
    num_output: 3
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}

layer {
  name: "loss"
  type: "EuclideanLoss"
  bottom: "fc8ft"
  bottom: "label"
  top: "loss"
}

The detailed error is as follows:-

"Creating Layer conv1 I0612 17:17:38.315083 9991 net.cpp:406] conv1 <- data I0612 17:17:38.315107 9991 net.cpp:380] conv1 -> conv1 F0612 17:17:38.352540 9991 blob.cpp:32] Check failed: shape[i] >= 0 (-1 vs. 0) "

Can anyone help?

2 Answers2

2

I got the same error message. But it seems my case is different from the questioner.

I met with this error because I added too many convolutional and pooling layers in my network, and the images finally shrunk to 1x1, in which case if I continued to add convolutional layers, the convolution cannot be performed, and this error appeared.

In case some one else meets with my problem, I post it here.

pfc
  • 1,831
  • 4
  • 27
  • 50
0

You got the shape of your input image backwards:. Instead of HxWx3, caffe expects it to be 3xWxH.
See this answer for some more details about arranging arrays for caffe in hdf5 files.

PS,
You do not need the Singleton dimension in your label array.

Shai
  • 111,146
  • 38
  • 238
  • 371