Использование GpuMat с Caffe - PullRequest
0 голосов
/ 27 июня 2018

В стандартном кафе пример кода здесь у нас есть:

void Classifier::WrapInputLayer(std::vector<cv::Mat>* input_channels) {
  Blob<float>* input_layer = net_->input_blobs()[0];

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

Если я использую cv::cuda::GpuMat, могу ли я переписать код для этого?

void Classifier::WrapInputLayer(std::vector<cv::cuda::GpuMat>* input_channels) {
  Blob<float>* input_layer = net_->input_blobs()[0];

  int width = input_layer->width();
  int height = input_layer->height();
  float* input_data = input_layer->mutable_gpu_data();
  for (int i = 0; i < input_layer->channels(); ++i) {
    cv::cuda::GpuMat channel(height, width, CV_32FC1, input_data); // OK I hope?
    input_channels->push_back(channel);
    input_data += width * height;
  }
}

Здесь мы используем этот GpuMat конструктор для инициализации указателя памяти графического процессора . Затем Preprocess() можно обновить, чтобы использовать соответствующие версии графического процессора интерфейса OpenCV.

Есть ли какие-нибудь подводные камни, которые меня ожидают?

ПРИМЕЧАНИЕ : Я только что внес изменение, и оно работает, как и ожидалось, но при проверке через Google не хватает информации по этой теме, поэтому, возможно, это может служить каноническим примером.

...