Multiple predictions without changing the net?

80 views
Skip to first unread message

Yanet Giuseppin

unread,
Jun 12, 2015, 10:55:20 AM6/12/15
to caffe...@googlegroups.com
Hello
I use a c++ code like this to predict images on my trained Caffe net (it is AlexNet)

  Blob<float>* input_layer = net_->input_blobs()[0];
  input_layer
->Reshape(1, num_channels_,input_geometry_.height, input_geometry_.width);

  net_
->Reshape();

  std
::vector<cv::Mat> input_channels;

 
int width = input_layer->width();
 
int height = input_layer->height();
 
float* input_data = input_layer->mutable_cpu_data();
 
for (int i = 0; i < input_layer->channels(); ++i) {
    cv
::Mat channel(height, width, CV_32FC1, input_data);
    input_channels
->push_back(channel);
    input_data
+= width * height;
 
}

  preprocess
(img, &input_channels);
  net_
->ForwardPrefilled();///the prediction

 
Blob<float>* output_layer = net_->output_blobs()[0];

Which is the correct way to predict more than one image at once? Just pushing two images is not working for me. Is it possible using this net or should I change a layer?


input: "data"
input_dim
: 1
input_dim
: 3
input_dim
: 100
input_dim
: 100
layer
{
  name
: "conv1"
  type
: "Convolution"
  bottom
: "data"
  top
: "conv1"
  param
{
    lr_mult
: 1.0
    decay_mult
: 1.0
 
}
  param
{
    lr_mult
: 2.0
    decay_mult
: 0.0
 
}
  convolution_param
{
    num_output
: 96
    kernel_size
: 11
    stride
: 4
    weight_filler
{
      type
: "gaussian"
      std
: 0.01
   
}
    bias_filler
{
      type
: "constant"
      value
: 0.0
   
}
 
}
}
layer
{
  name
: "relu1"
  type
: "ReLU"
  bottom
: "conv1"
  top
: "conv1"
}
layer
{
  name
: "norm1"
  type
: "LRN"
  bottom
: "conv1"
  top
: "norm1"
  lrn_param
{
    local_size
: 5
    alpha
: 0.0001
    beta
: 0.75
 
}
}
layer
{
  name
: "pool1"
  type
: "Pooling"
  bottom
: "norm1"
  top
: "pool1"
  pooling_param
{
    pool
: MAX
    kernel_size
: 3
    stride
: 2
 
}
}
layer
{
  name
: "conv2"
  type
: "Convolution"
  bottom
: "pool1"
  top
: "conv2"
  param
{
    lr_mult
: 1.0
    decay_mult
: 1.0
 
}
  param
{
    lr_mult
: 2.0
    decay_mult
: 0.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
: 0.1
   
}
 
}
}
layer
{
  name
: "relu2"
  type
: "ReLU"
  bottom
: "conv2"
  top
: "conv2"
}
layer
{
  name
: "norm2"
  type
: "LRN"
  bottom
: "conv2"
  top
: "norm2"
  lrn_param
{
    local_size
: 5
    alpha
: 0.0001
    beta
: 0.75
 
}
}
layer
{
  name
: "pool2"
  type
: "Pooling"
  bottom
: "norm2"
  top
: "pool2"
  pooling_param
{
    pool
: MAX
    kernel_size
: 3
    stride
: 2
 
}
}
layer
{
  name
: "conv3"
  type
: "Convolution"
  bottom
: "pool2"
  top
: "conv3"
  param
{
    lr_mult
: 1.0
    decay_mult
: 1.0
 
}
  param
{
    lr_mult
: 2.0
    decay_mult
: 0.0
 
}
  convolution_param
{
    num_output
: 384
    pad
: 1
    kernel_size
: 3
    weight_filler
{
      type
: "gaussian"
      std
: 0.01
   
}
    bias_filler
{
      type
: "constant"
      value
: 0.0
   
}
 
}
}
layer
{
  name
: "relu3"
  type
: "ReLU"
  bottom
: "conv3"
  top
: "conv3"
}
layer
{
  name
: "conv4"
  type
: "Convolution"
  bottom
: "conv3"
  top
: "conv4"
  param
{
    lr_mult
: 1.0
    decay_mult
: 1.0
 
}
  param
{
    lr_mult
: 2.0
    decay_mult
: 0.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
: 0.1
   
}
 
}
}
layer
{
  name
: "relu4"
  type
: "ReLU"
  bottom
: "conv4"
  top
: "conv4"
}
layer
{
  name
: "conv5"
  type
: "Convolution"
  bottom
: "conv4"
  top
: "conv5"
  param
{
    lr_mult
: 1.0
    decay_mult
: 1.0
 
}
  param
{
    lr_mult
: 2.0
    decay_mult
: 0.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
: 0.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.0
    decay_mult
: 1.0
 
}
  param
{
    lr_mult
: 2.0
    decay_mult
: 0.0
 
}
  inner_product_param
{
    num_output
: 4096
    weight_filler
{
      type
: "gaussian"
      std
: 0.005
   
}
    bias_filler
{
      type
: "constant"
      value
: 0.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.0
    decay_mult
: 1.0
 
}
  param
{
    lr_mult
: 2.0
    decay_mult
: 0.0
 
}
  inner_product_param
{
    num_output
: 4096
    weight_filler
{
      type
: "gaussian"
      std
: 0.005
   
}
    bias_filler
{
      type
: "constant"
      value
: 0.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
: "fc8"
  type
: "InnerProduct"
  bottom
: "fc7"
  top
: "fc8"
  param
{
    lr_mult
: 1.0
    decay_mult
: 1.0
 
}
  param
{
    lr_mult
: 2.0
    decay_mult
: 0.0
 
}
  inner_product_param
{
    num_output
: 3
    weight_filler
{
      type
: "gaussian"
      std
: 0.01
   
}
    bias_filler
{
      type
: "constant"
      value
: 0.0
   
}
 
}
}
layer
{
  name
: "prob"
  type
: "Softmax"
  bottom
: "fc8"
  top
: "prob"
}


Reply all
Reply to author
Forward
0 new messages