网站建设公司资质,小游戏网站怎么做,亳州市网站建设公司,能够做外贸的网站有哪些问题验证ncnn模型的精度
1、进行pth模型的验证
得到ncnn模型的顺序为#xff1a;.pth–.onnx–ncnn .pth的精度验证如下#xff1a; 如进行的是二分类#xff1a; model init_model(model, data_cfg, devicedevice, modeeval)###.pth转.onnx模型# #---# input_names …验证ncnn模型的精度
1、进行pth模型的验证
得到ncnn模型的顺序为.pth–.onnx–ncnn .pth的精度验证如下 如进行的是二分类 model init_model(model, data_cfg, devicedevice, modeeval)###.pth转.onnx模型# #---# input_names [x]# output_names [y]# inp torch.randn(1, 3, 256, 128) ##错误示例inp np.full((1, 3, 160, 320), 0.5).astype(np.float) #(160,320) (h,w)inp torch.FloatTensor(inp)out model(inp)print(out)没有经过softmax层out输出为±1的两个值。
2、转为onnx后的精度验证 sess onnxruntime.InferenceSession(G:\\pycharm_pytorch171\\pytorch_classification\\main\\sim.onnx, providers[CUDAExecutionProvider]) # use gpuinput_name sess.get_inputs()[0].nameprint(input_name: , input_name)output_name sess.get_outputs()[0].nameprint(output_name: , output_name)# test_images torch.rand([1, 3, 256, 128])test_images np.full((1, 3, 160, 320), 0.5).astype(np.float) #(160,320) (h,w)test_images torch.FloatTensor(test_images)print(test_image, test_images)prediction sess.run([output_name], {input_name: test_images.numpy()})print(prediction)3、ncnn精度验证 首先保证mean、norm输出的值与onnx保持一致因为onnx直接输入值0.5ncnn模型经过mean、norm计算后的结果与0.5一致就行。 然后就是ncnn模型的计算输出 - 查看输出结果是否是0.5首先得将输入值1给到img cppconstexpr int w 320;constexpr int h 160;float cbuf[h][w];cv::Mat img(h, w, CV_8UC3,(float *)cbuf);//BYTE* iPtr new BYTE[128 * 256 * 3];BYTE* iPtr new BYTE[h * w * 3];for (int i 0; i h; i){for (int j 0; j w; j){for (int k 0; k 3; k){//iPtr[i * 256 * 3 j * 3 k] img.atcv::Vec3f(i, j)[k];img.atcv::Vec3b(i, j)[k] 1;}}}- 经过上面的赋值通过了mean、norm计算后得到的结果进行查看值为0.5则正确转换。得到的结果送入下面的代码进行输出。ncnn结果为mat因此采用该方法进行遍历查看。cpp//输出ncnn matvoid ncnn_mat_print(const ncnn::Mat m){for (int q 0; q m.c; q){const float* ptr m.channel(q);for (int y 0; y m.h; y){for (int x 0; x m.w; x){printf(%f , ptr[x]);}ptr m.w;printf(\n);}printf(------------------------\n);}}将mat给到模型进行推理得到结果。4、结果确认
一般情况下pth模型与onnx模型结果相差不大ncnn会有点点损失千分位上的损失这样精度基本上是一致的。 若不一致看哪一步结果相差太大如果是ncnn这一步相差太大检查是否是值输入有问题或者是输入的(h,w)弄反了。