Open tinalazy opened 6 years ago
第一,你的数据格式是什么?这个unit_test.cpp中的输入是npy格式的数据。比如你要输入一张rbg的图,那么,减均值除方差的参数你要清楚。其实这个npy格式的数据就是减均值除方差之后的数据,直接输入网络即可。 第二,如果结果不对的话,就要一层一层对特征值了。
给你们指条明路
static void prepare_process(const cv::Mat &image, const int out_w,const int out_h,std::shared_ptr
cv::Scalar pixel_mean(103.94, 116.78, 123.68);
cv::Scalar pixel_norm(0.017, 0.017, 0.017);
if (src.channels() == 3)
src.convertTo(img_float, CV_32FC3);
else
src.convertTo(img_float, CV_32FC1);
// mean and normalize
cv::Mat mean_mask = cv::Mat(img_float.rows, img_float.cols, CV_32FC3, pixel_mean);
cv::Mat norm_mask = cv::Mat(img_float.rows, img_float.cols, CV_32FC3, pixel_norm);
cv::Mat img_meaned, img_normalized;
cv::subtract(img_float, mean_mask, img_meaned);
cv::multiply(img_meaned, norm_mask, img_normalized);
// resize
cv::resize(img_normalized, img_normalized, cv::Size(out_w, out_h), 0, 0, cv::INTER_LINEAR);
// load data
for (int h = 0; h < out_h; ++h)
{
const float *ptr = img_normalized.ptr<float>(h);
int img_index = 0;
for (int w = 0; w < out_w; ++w)
{
for (int c = 0; c < 3; ++c)
{
pData[idx_in++] = static_cast<float>(ptr[img_index++]);
}
}
}
}
cv::Mat image = srcImgs.clone();
prepare_process(image,96,112,buffer_in);
std::map<std::string, mace::MaceTensor> inputs;
inputs["data"] = mace::MaceTensor(input_shapes, buffer_in);
这样子就可以把通用的opencv mat转成mace需要的格式了。自己把减均值除方差那几个参数对应改一下就行了。。。 说一句:好好学习,把基础打好,不要在这些小问题上浪费时间额。。。
多谢多谢 @zhy520xp
前面的测试已经做完了。 我新弄了一个网络想测试一下但是提示data 错误,一直找不到原因能简单说说吗~ 求指导~~~