在线训练平台的模型文件部署后错误执行,但是yolo11训出来的正常

Viewed 53

问题描述


这里的模型可以使用ai在线训练平台的吗?之前用的demo里的模型是正确的。后来我用了平台训出来的,没有识别到东西,却一直能执行这个if(!yolo_results.empty())
{
printf("YOLO识别到目标 数量:%zu\n", yolo_results.size());
}语句,是因为勘智用的不是yolo11吗?还是别的原因

复现步骤


int yolo_video_inference(GeneralConfig &general_config, YoloConfig &yolo_config) {
FrameSize image_wh = {general_config.AI_FRAME_WIDTH, general_config.AI_FRAME_HEIGHT};
std::vector labels = readLabelsFromTxt(yolo_config.labels_txt_filepath);
DumpRes dump_res;
std::vector yolo_results;
cv::Mat draw_frame(general_config.OSD_HEIGHT, general_config.OSD_WIDTH, CV_8UC4, cv::Scalar(0, 0, 0, 0));
dims_t in_shape { 1, general_config.AI_FRAME_CHANNEL, general_config.AI_FRAME_HEIGHT, general_config.AI_FRAME_WIDTH };
runtime_tensor input_tensor;
PipeLine pl(general_config, yolo_config.debug_mode);
pl.Create();

Yolo11 yolo11(yolo_config.task_type, yolo_config.task_mode, yolo_config.kmodel_path,
              yolo_config.conf_thres, yolo_config.nms_thres, yolo_config.mask_thres,
              labels, image_wh, yolo_config.debug_mode);

static int frame_counter = 0;

while(!isp_stop) {
    ScopedTiming st("total time", 1);
    pl.GetFrame(dump_res);

    input_tensor = host_runtime_tensor::create(typecode_t::dt_uint8, in_shape, 
        { (gsl::byte *)dump_res.virt_addr, compute_size(in_shape) },
        false, hrt::pool_shared, dump_res.phy_addr).expect("cannot create input tensor");
    hrt::sync(input_tensor, sync_op_t::sync_write_back, true).expect("sync write_back failed");

    // ======== 🔴 只改这里:NV21 → BGR ========

uint8_t* ptr = (uint8_t*)dump_res.virt_addr;
int w = general_config.AI_FRAME_WIDTH;
int h = general_config.AI_FRAME_HEIGHT;

cv::Mat r(h, w, CV_8UC1, ptr + 0 * w * h);
cv::Mat g(h, w, CV_8UC1, ptr + 1 * w * h);
cv::Mat b(h, w, CV_8UC1, ptr + 2 * w * h);

std::vector ch = {b, g, r}; // OpenCV 是 BGR
cv::Mat camera_frame;
cv::merge(ch, camera_frame);
// ========================================

    yolo11.pre_process(input_tensor);
    yolo11.inference();
    yolo11.post_process(yolo_results);

//模型标志位?????
if(!yolo_results.empty())
{
printf("YOLO识别到目标 数量:%zu\n", yolo_results.size());
}

    draw_frame.setTo(cv::Scalar(0, 0, 0, 0));
    yolo11.draw_results(draw_frame, yolo_results);
    
    // 将处理后的图像放入缓冲区供二值化线程使用
    {
        std::lock_guard<std::mutex> lock(buffer_mutex);
        
        if (image_buffer.size() >= MAX_BUFFER_SIZE) {
            image_buffer.pop();
            printf("缓冲区满,丢弃一帧\n");
        }
        
        ImageFrame img_frame;
        img_frame.frame = camera_frame.clone();
        img_frame.frame_id = frame_counter++;
        img_frame.timestamp = std::chrono::system_clock::now();
        image_buffer.push(img_frame);
        
        // std::string filename = "binary_frame_" + std::to_string(frames_binarized) + ".jpg";   
        // cv::imwrite(filename, camera_frame);

            //  if (img_frame.frame_id<350) {        
            //     std::string filename = "zhui" + std::to_string(frames_binarized) + ".jpg";   
            //     cv::imwrite(filename, camera_frame);
            //                                     }

    }
    
    buffer_cv.notify_one();
    
    pl.InsertFrame(draw_frame.data);
    pl.ReleaseFrame(dump_res);
    
    frames_processed++;
    
    if (frames_processed % 100 == 0) {
        printf("已处理帧数: %d, 缓冲区大小: %zu\n", 
               frames_processed.load(), image_buffer.size());
    }
}

pl.Destroy();
return 0;

}这个是我主代码,这里的模型可以使用ai在线训练平台的吗?我用了平台训出来的,没有识别到东西,却一直能执行这个if(!yolo_results.empty())
{
printf("YOLO识别到目标 数量:%zu\n", yolo_results.size());
}语句,勘智用的是yolo11吗?

1 Answers

这个代码看着不是官方的?是自己写的吗?