zhy520xp / mace-makefile-project

makefile 交叉编译 libmace.a,并能在嵌入式端调用GPU来跑深度学习模型
95 stars 18 forks source link

如何修改unit_test_cpu 文件啊 #15

Open tinalazy opened 5 years ago

tinalazy commented 5 years ago

前面的测试已经做完了。 我新弄了一个网络想测试一下但是提示data 错误,一直找不到原因能简单说说吗~ 求指导~~~

zhy520xp commented 5 years ago

第一,你的数据格式是什么?这个unit_test.cpp中的输入是npy格式的数据。比如你要输入一张rbg的图,那么,减均值除方差的参数你要清楚。其实这个npy格式的数据就是减均值除方差之后的数据,直接输入网络即可。 第二,如果结果不对的话,就要一层一层对特征值了。

zhy520xp commented 5 years ago

给你们指条明路 static void prepare_process(const cv::Mat &image, const int out_w,const int out_h,std::shared_ptr &buffer_in) { cv::Mat src = image; cv::Mat img_float; long idx_in = 0; float pData = reinterpret_cast<float >(buffer_in.get());

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++]);
        }
    }
}

}

zhy520xp commented 5 years ago

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);
zhy520xp commented 5 years ago

这样子就可以把通用的opencv mat转成mace需要的格式了。自己把减均值除方差那几个参数对应改一下就行了。。。 说一句:好好学习,把基础打好,不要在这些小问题上浪费时间额。。。

xiaqing10 commented 5 years ago

多谢多谢 @zhy520xp