Caffe python предсказание отличается при использовании c ++ - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь преобразовать python код, который предсказывает модель обученного кафе, в c ++, но я получаю разные результаты предсказания.

Входной слой выглядит следующим образом:

name: "*"
layer {
  name: "data"
  type: "Input"
  top: "data"
  input_param { shape: { dim: 1 dim: 3 dim: 224 dim: 224 } }
}

теперь код python, использующий преобразователи, подобные следующим:

caffe_transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
    caffe_transformer.set_transpose('data', (2, 0, 1))  # move image channels to outermost
    caffe_transformer.set_mean('data', np.array([104, 117, 123]))  # subtract the dataset-mean value in each channel
    caffe_transformer.set_raw_scale('data', 255)  # rescale from [0, 1] to [0, 255]
    caffe_transformer.set_channel_swap('data', (2, 1, 0))  # swap channels from RGB to BGR

Мой код c ++ основан на примере классификации caffe c ++, но я изменил функцию Preprocess:

void CaffeClassification::Preprocess(const cv::Mat& img,
                            std::vector<cv::Mat>* input_channels) 
{
  cv::Mat sample;
  cv::resize(img, sample, cv::Size(256, 256));
  cv::Rect roi(16, 16, 
    input_geometry_.width, input_geometry_.height);
  cv::Mat crop = sample(roi); 

  crop.convertTo(crop, CV_32FC3);
  crop -= cv::Scalar(123, 117, 104);

  cv::split(crop, *input_channels); 
}

Но python код дает мои правильные результаты, в то время как код C ++ - нет. Что я делаю не так?

...