0
我一直在following an example我被提及如何將OpenCV Mat
轉換成我可以預測的Caffe對象。據我瞭解,首節縮放圖像,然後初始化的朱古力類TransformationParameter
:將OpenCV灰度墊轉換成Caffe blob
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的墊「補丁」轉換成「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墊轉換爲來自Caffe BLOB,爲什麼我要回推「輸入」矢量並將它傳遞給互聯網?我無法直接將input_blob傳遞到網絡中以獲取我的預測嗎?
std::vector<Blob<float>*> input;
input.push_back(&input_blob);
std::vector<Blob<float>*> output = net->Forward(input);
非常感謝!順便說一下,如果我想在Mat對象上自己執行縮放步驟,那麼我應該只將圖像的多個像素乘以0.0039215684? –
@JackSimpson我不是100%確定。你應該能夠在調試模式下自己檢查它。 – Shai