caffe::Caffe::set_mode(caffe::Caffe::GPU);
caffe::Caffe::SetDevice(0);
m_net = new caffe::Net<float>(MODEL_FILE, caffe::TEST);
m_net->CopyTrainedLayersFrom(TRAINED_FILE);
----------------------------------
float* Predict(const cv::Mat *image)
{
float loss = 0.0;
std::vector<cv::Mat> patches;
boost::shared_ptr<caffe::MemoryDataLayer<float> > memory_data_layer;
std::vector<int> labels(1);
// set the patch for testing
patches.push_back(*image);
// push vector<Mat> to data layer
memory_data_layer = boost::static_pointer_cast<caffe::MemoryDataLayer<float> >(m_net->layer_by_name("data"));
memory_data_layer->AddMatVector(patches, labels);
// Net forward
const std::vector<caffe::Blob<float>*> & results = m_net->ForwardPrefilled(&loss);
float *output = results[1]->mutable_cpu_data();
return output;
}