Esempio n. 1
0
cv::Mat EMat::AppendBottom(cv::Mat &src) {
    assert(src.cols == cols);

    cv::Mat newMat(src.rows + rows, cols, type());
    AppendBottom(src, newMat);
    *this = newMat;
    return newMat;
}
Esempio n. 2
0
//face detection
void faceRecognition::init(const char *filename, bool is_gpu){
	if (is_gpu)
		caffe::Caffe::set_mode(caffe::Caffe::GPU);
	else
		caffe::Caffe::set_mode(caffe::Caffe::CPU);
	lm.load(filename);

	layer_sz = rec_layer_names.size();
	layers_.resize(layer_sz);
	param.resize(layer_sz);
	bottom_vecs_.resize(layer_sz);
	top_vecs_.resize(layer_sz);

	input_shape.push_back(1);
	input_shape.push_back(3);
	input_shape.push_back(224);
	input_shape.push_back(224);

	for (int i = 0; i < layer_sz; i++)
	{
		std::string name = rec_layer_names[i];
		if (name == "INPUT")
		{
			param[i].size = 0;
			param[i].input_param.shape_ = input_shape;
			layers_[i].reset(new caffe::InputLayer<float>(param[i]));
			AppendTop(i);
			layers_[i]->SetUp(bottom_vecs_[i], top_vecs_[i]);
		}
		else if (name == "CONVOLUTION")
		{
			lm.readConvParam(param[i]);
			layers_[i].reset(new caffe::ConvolutionLayer<float>(param[i]));
			AppendBottom(i, i - 1);
			AppendTop(i);
			layers_[i]->SetUp(bottom_vecs_[i], top_vecs_[i]);
		}
		else if (name == "RELU")
		{
			param[i].size = 0;
			layers_[i].reset(new caffe::ReLULayer<float>(param[i]));
			AppendBottom(i, i - 1);
			AppendTop(i);
			layers_[i]->SetUp(bottom_vecs_[i], top_vecs_[i]);
		}
		else if (name == "POOLING")
		{
			lm.readPoolParam(param[i]);
			layers_[i].reset(new caffe::PoolingLayer<float>(param[i]));
			AppendBottom(i, i - 1);
			AppendTop(i);
			layers_[i]->SetUp(bottom_vecs_[i], top_vecs_[i]);
		}
		else if (name == "INNERPRODUCT")
		{
			lm.readInnerProductParam(param[i]);
			layers_[i].reset(new caffe::InnerProductLayer<float>(param[i]));
			AppendBottom(i, i - 1);
			AppendTop(i);
			layers_[i]->SetUp(bottom_vecs_[i], top_vecs_[i]);
		}
		else if (name == "DROPOUT")
		{
			param[i].size = 0;
			layers_[i].reset(new caffe::DropoutLayer<float>(param[i]));
			AppendBottom(i, i - 1);
			AppendTop(i);
			layers_[i]->SetUp(bottom_vecs_[i], top_vecs_[i]);
		}
		else if (name == "SOFTMAX")
		{
			param[i].size = 0;
			layers_[i].reset(new caffe::SoftmaxLayer<float>(param[i]));
			AppendBottom(i, i - 1);
			AppendTop(i);
			layers_[i]->SetUp(bottom_vecs_[i], top_vecs_[i]);
		}
		else
			std::cout << "Wrong laeyer name\n";
	}
}