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; }
//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"; } }