【问题标题】:Converting OpenCV grayscale Mat to Caffe blob将 OpenCV 灰度 Mat 转换为 Caffe blob
【发布时间】:2015-11-19 05:00:24
【问题描述】:

我一直是following an example,有人向我介绍了如何将 OpenCV Mat 转换为可以从中进行预测的 Caffe 对象。据我了解,第一部分缩放图像,然后初始化caffe类TransformationParameter:

const float img_to_net_scale = 0.0039215684;
TransformationParameter input_xform_param;
input_xform_param.set_scale( img_to_net_scale );
DataTransformer<float> input_xformer( input_xform_param, TEST );

然后,OpenCV Mat“补丁”被转换为“input_blob”。我已经更改了这部分,因为我已经以灰度而不是彩色加载了我的图像。

cv::Mat patch = cv::imread( input_file_str, CV_LOAD_IMAG_GRAYSCALE  );
Blob<float> input_blob;
input_blob.Reshape(1, patch.channels(), patch.rows, patch.cols );
input_xformer.Transform( patch, &input_blob );

最后,我不太确定这部分是做什么的——如果我已经将我的 OpenCV Mat 转换为 Caffe blob,为什么我需要推回“输入”向量并将其传递给网络?我不能将 input_blob 直接传递到网络中以恢复我的预测吗?

std::vector<Blob<float>*> input;
input.push_back( &input_blob );

std::vector<Blob<float>*> output = net->Forward( input );

【问题讨论】:

    标签: c++ opencv machine-learning deep-learning caffe


    【解决方案1】:

    您需要 push_back 您的 input_blob 才能将其传递给 net,因为 net 期望其输入为Blobs 的std::vector(原则上,可能有 nets 需要多个输入 blob 才能产生输出)。
    请注意,您不是将input_blob 复制到输入向量中,而是将指针传递给它。

    【讨论】:

    • 非常感谢!顺便说一句,如果我想自己对 Mat 对象执行缩放步骤,我应该将图像乘以 0.0039215684 吗?
    • @JackSimpson 我不是 100% 确定。你应该可以在调试模式下自己检查。
    猜你喜欢
    • 2012-05-07
    • 2012-01-17
    • 2015-03-02
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    相关资源
    最近更新 更多