yolov8官方c++代码vs2019onnxruntime推理失败问题

v8定位模型,使用官方代码,推理结果为杂乱无章的定位框或者框都在左上角。

调试后发现是后处理代码处,对输出头的形状处理不正确,已修正

位置原代码inference.cpp第224行,后处理部分

原代码:

        int strideNum = outputNodeDims[1];//8400
        int signalResultNum = outputNodeDims[2];//84
        std::vector<int> class_ids;
        std::vector<float> confidences;
        std::vector<cv::Rect> boxes;
        cv::Mat rawData;
        if (modelType == YOLO_DETECT_V8)
        {
            // FP32
            rawData = cv::Mat(strideNum, signalResultNum, CV_32F, output);
        }
        else
        {
            // FP16
            rawData = cv::Mat(strideNum, signalResultNum, CV_16F, output);
            rawData.convertTo(rawData, CV_32F);
        }


        float* data = (float*)rawData.data;

修改后代码:

        int strideNum = outputNodeDims[2];//8400
        int signalResultNum = outputNodeDims[1];//84
        std::vector<int> class_ids;
        std::vector<float> confidences;
        std::vector<cv::Rect> boxes;
        cv::Mat rawData;
        cv::Mat transposed_output;
        if (modelType == YOLO_DETECT_V8)
        {
            // FP32
            //rawData = cv::Mat(strideNum, signalResultNum, CV_32F, output);
            rawData = cv::Mat(signalResultNum, strideNum, CV_32F, output);
            cv::transpose(rawData, transposed_output);
        }
        else
        {
            // FP16
            rawData = cv::Mat(signalResultNum, strideNum, CV_16F, output);
            rawData.convertTo(rawData, CV_32F);
            cv::transpose(rawData, transposed_output);
        }


        //float* data = (float*)rawData.data;
        float* data = (float*)transposed_output.data;

修改后定位框准确无误

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值