1

i'm trying to convert an onnx model to ncnn model, i use the command ~/data/ncnn-master/build/tools/onnx/onnx2ncnn ./flip_sim.onnx flip_sim.param flip_sim.bin to get para and bin file when a input a whole white image,the result of onnxruntime and ncnn is not same,even from second layers,i can't figure out why。here is the ncnn code

#include "net.h"
#if defined(USE_NCNN_SIMPLEOCV)
#include "simpleocv.h"
#else
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#endif
#include <stdio.h>
#include <vector>
#include <iostream>
using namespace std;


float sum_dep(float* begin, int step){
    float sum = 0;
    for(int i=0; i<step; i++){
        sum += *(begin + i);
    }
    return sum;
}


int main(int argc, char** argv){
    ncnn::Net FLIP;
    FLIP.load_param("./flip_sim.param");
    FLIP.load_model("./flip_sim.bin");
    cv::Mat input = cv::Mat(1080,1080,CV_8UC1, cv::Scalar(255));
    ncnn::Mat in = ncnn::Mat::from_pixels(input.data, ncnn::Mat::PIXEL_GRAY, input.cols, input.rows);
    const float norm_vals[1] = {1/255.0f};
    in.substract_mean_normalize(0, norm_vals);
    ncnn::Extractor ex = FLIP.create_extractor();
    ex.input("input:0", in);
    float in_sum = sum_dep((float*)in.data, in.w*in.h*in.c*in.d);
    ncnn::Mat out;
    ex.extract("vgg_19/final_softmax:0", out);
    float* begin_point = (float*)out.data;
    auto out_min = *min_element(begin_point, begin_point+out.w*out.h*out.d*out.c);
    auto out_max = *max_element(begin_point, begin_point+out.w*out.h*out.d*out.c);
    
}

here is the onnx file https://pan.baidu.com/s/13b_JbQW_Zbma8j6IOQiYTw password:2881

0 Answers0