KaiyangZhou / deep-person-reid

Torchreid: Deep learning person re-identification in PyTorch.
https://kaiyangzhou.github.io/deep-person-reid/
MIT License
4.25k stars 1.14k forks source link

求助: ONNX model 's reasoning results are different on different platforms #541

Open lmq5294249 opened 1 year ago

lmq5294249 commented 1 year ago

1、Export .pt reid models to: ONNX 截屏2023-04-27 20 36 34 2、Then I export to NCNN model osnet_x0_75_msmt17_combineall-sim-opt.zip 3、set up parameters const float m_mean_value[3] = { 0.485, 0.456, 0.406}; const float m_norm_value[3] = { 0.229, 0.224, 0.225}; int _input_width = 128, int _input_height = 256,

std::vector FastReID::detectMatToVector(const cv::Mat &rgb) { cv::Mat resultMat;

int img_w = rgb.cols;
int img_h = rgb.rows;
ncnn::Mat ncnn_img;
ncnn_img = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_RGB, img_w,img_h, input_width, input_height);
ncnn_img.substract_mean_normalize(m_mean_value, m_norm_value);

ncnn::Extractor ex = net.create_extractor();
ex.set_num_threads(1);
ex.input("images", ncnn_img);

ncnn::Mat inference_out;
ex.extract("output", inference_out);

if (inference_out.empty()) {
    return resultMat;
}

float *pha_data = (float*)inference_out.data;
cv::Mat onefeature(inference_out.h, inference_out.w, CV_32FC1, pha_data);

cv::Mat mat_1d = onefeature.reshape(1, 1); // 转换为一维的cv::Mat
std::vector<float> vec(mat_1d.ptr<float>(0), mat_1d.ptr<float>(0) + mat_1d.cols); // 拷贝数据到vector中
return vec;

} 5、分别将两张不同人形的图输出结果导入下面的函数,输出结果 double cosine_similarity(const std::vector& v1, const std::vector& v2) { // 计算向量长度 double len1 = 0.0, len2 = 0.0; for (double x : v1) { len1 += x x; } for (double x : v2) { len2 += x x; }

// 计算点积
double dot = 0.0;
size_t n = fmin(v1.size(), v2.size());
for (size_t i = 0; i < n; i++) {
    dot += v1[i] * v2[i];
}

// 计算余弦相似度
double cos_sim = dot / (sqrt(len1) * sqrt(len2));
return cos_sim;

}

得到错误的结果:即使两张图片区别很大,但是结果还是0.99765.显然结果是错误的。 6、我通过Use Torchreid as a feature extractor in your projects的例子来计算就发现结果相似度就比较低

显然是我NCNN模型是错误的,我注意到转为ONNX提示了警告,是不是我用的转换指令有问题 python export.py -p "./osnet_x0_25_market1501.pth" -hp --imgsz 256 128 --include onnx

十万火急求助:折腾我一个多星期!!!!!!

lmq5294249 commented 1 year ago

ORTSuperResolution.zip detect 2.py.zip 在MAC上用osnet_x0_75_msmt17_combineall.onnx 测试两张不同图片,输出相似度很低0.47 但是在移动平台IOS上用ONNX检测不同图片输出结果相似度超级高0.92多 从结果来说 在移动平台的推测结果是错误??? 不明白这个是什么原因???