خطا هنگام تست معماری lenet در caffe - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

خطا هنگام تست معماری lenet در caffe

+2 امتیاز

سلام .

من به راحتی تونستم پایگاه داده خودم را آموزش بدم .

فایل آموزش:

name: "LeNet"
layer {
  name: "mnist"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    scale: 0.00390625
  }
  data_param {
    source: "train_lmdb"
    batch_size: 64
    backend: LMDB
  }
}
layer {
  name: "mnist"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  transform_param {
    scale: 0.00390625
  }
  data_param {
    source: "test_lmdb"
    batch_size: 100
    backend: LMDB
  }
}
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  convolution_param {
    num_output: 20
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}
layer {
  name: "conv2"
  type: "Convolution"
  bottom: "pool1"
  top: "conv2"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  convolution_param {
    num_output: 50
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "pool2"
  type: "Pooling"
  bottom: "conv2"
  top: "pool2"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}
layer {
  name: "ip1"
  type: "InnerProduct"
  bottom: "pool2"
  top: "ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 500
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "relu1"
  type: "ReLU"
  bottom: "ip1"
  top: "ip1"
}
layer {
  name: "ip2"
  type: "InnerProduct"
  bottom: "ip1"
  top: "ip2"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 10
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "accuracy"
  type: "Accuracy"
  bottom: "ip2"
  bottom: "label"
  top: "accuracy"
  include {
    phase: TEST
  }
}
layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "ip2"
  bottom: "label"
  top: "loss"
}

فایل solver:

net: "lenet_train_test.prototxt"
test_iter: 100
test_interval: 500
base_lr: 0.01
momentum: 0.9
weight_decay: 0.0005
lr_policy: "inv"
gamma: 0.0001
power: 0.75
display: 100
max_iter: 10000
snapshot: 5000
snapshot_prefix: "enet"
solver_mode: GPU

 

فایل deploy:

name: "LeNet"
layer {
    name: "data"
    type: "Input"
    top: "data"
    input_param { shape: { dim: 1 dim: 1 dim: 28 dim: 28 } }
}
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  convolution_param {
    num_output: 20
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}
layer {
  name: "conv2"
  type: "Convolution"
  bottom: "pool1"
  top: "conv2"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  convolution_param {
    num_output: 50
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "pool2"
  type: "Pooling"
  bottom: "conv2"
  top: "pool2"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}
layer {
  name: "ip1"
  type: "InnerProduct"
  bottom: "pool2"
  top: "ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 500
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "relu1"
  type: "ReLU"
  bottom: "ip1"
  top: "ip1"
}
layer {
  name: "ip2"
  type: "InnerProduct"
  bottom: "ip1"
  top: "ip2"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 10
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}

layer {
  name: "loss"
  type: "Softmax"
  bottom: "ip2"
  top: "loss"
}

فایل سورس کد:


#include <iostream>
#include <opencv2/opencv.hpp>
#include <caffe/caffe.hpp>
#include <string>
using namespace caffe;
using namespace std;

int main1(int argc, char **argv)
{
	std::string imageFile =  R"(0_imga0001513.jpg)";

	std::string argv1 = R"(lpr_lenet_deploy.prototxt)";
	std::string argv2 = R"(lenet_iter_10000.caffemodel)";

		typedef float type;
		type ary[28 * 28];

		cv::Mat gray = cv::imread(imageFile, 0);
		
		//cv::putText(gray, "1", cv::Point(4, 22), 5, 1.4, cv::Scalar(0), 2);

		for (int i = 0; i < 28 * 28; i++) {
			ary[i] = static_cast<type>(gray.data[i])*0.00390625;
	}

		cv::imshow("x", gray);
		cv::waitKey();

		Caffe::set_mode(Caffe::CPU);

		Net<type> lenet(argv1, caffe::TEST);

		lenet.CopyTrainedLayersFrom(argv2);



		Blob<type> *input_ptr = lenet.input_blobs()[0];
		input_ptr->Reshape(1, 1, 28, 28);

		Blob<type> *output_ptr = lenet.output_blobs()[0];
		output_ptr->Reshape(1, 10, 1, 1);

		input_ptr->set_cpu_data(ary);

		lenet.Forward();


		const type* begin = output_ptr->cpu_data();

			int index = 0;
		for (int i = 1; i < 10; i++) {
			if (begin[index] < begin[i])
				index = i;
		}

		for (int i = 0; i < 10; i++)
			cout << i << "\t" << begin[i] << endl;

		cout << "res:\t" << index << "\t" << begin[index] << endl;
		return 0;
}

وقتی کامپایلر در حال اجرای خط 

lenet.CopyTrainedLayersFrom(argv2);

است با خطا زیر مواجه میشه علتش از کجاست ؟

  "Cannot copy param  weights from layer shape mismatch.  Source param shape is 20 3 5 5 target param shape is "20 1 5 5 To learn this layer's parameters from scratch rather than copying from a saved net, rename the layer.

سوال شده خرداد 5, 1396  بوسیله ی farshid (امتیاز 137)   13 27 34

1 پاسخ

+1 امتیاز

سلام. شما با تصاویر رنگی 3 کاناله عملیات آموزش را انجام دادید به احتمال زیاد و بعدش تو کدتون به صورت GrayScale تک کاناله دارید تست می کنید پایگاه داده lmdb تهیه شده را پاک کنید و دوباره با فلگ -gray مجدد پایگاه داده را ایجاد کنید تو بقیه موارد که اشکالی نمی بینم بجز اینکه باز هم مشکل دیگه داشته باشید برای اطلاعات بیشتر در مورد ساخت پایگاه داده از روی تصاویر این پست را مطالعه کنید.

پاسخ داده شده خرداد 6, 1396 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
سلام میشه لطف  کنید بگید چطوری باید تصاویر را بخونیم و مدل کنیم ؟
منم دقیقا همین مشکلا دارم و چند وقته خیلی درگیرش هستم
...