nanodet icon indicating copy to clipboard operation
nanodet copied to clipboard

ncnn 推理decode_infer API crash

Open jienimi opened this issue 2 years ago • 3 comments

ncnn 推理decode_infer API 是否有问题,feats.row(idx) 会导致指针溢出。 feats mat size 是,2125*33 , num_points 是 2125 ,feats.row(idx) 的逻辑是 取idx 行 数据,我的理解这里是不是取 feats.col(idx). ?

image

void NanoDet::decode_infer() { const int num_points = center_priors.size(); //printf("num_points:%d\n", num_points);

//cv::Mat debug_heatmap = cv::Mat(feature_h, feature_w, CV_8UC3);
for (int idx = 0; idx < num_points; idx++)
{
    const int ct_x = center_priors[idx].x;
    const int ct_y = center_priors[idx].y;
    const int stride = center_priors[idx].stride;

    const float* scores = feats.row(idx);
    float score = 0;
    int cur_label = 0;
    for (int label = 0; label < this->num_class; label++)
    {
        if (scores[label] > score)
        {
            score = scores[label];

...

jienimi avatar Sep 07 '22 02:09 jienimi

我觉得目前的NCNN推理代码可能版本比较老,目前的模型是没办法使用的

jun214384468 avatar Sep 13 '22 07:09 jun214384468

ncnn 推理decode_infer API 是否有问题,feats.row(idx) 会导致指针溢出。 feats mat size 是,2125*33 , num_points 是 2125 ,feats.row(idx) 的逻辑是 取idx 行 数据,我的理解这里是不是取 feats.col(idx). ?

image

void NanoDet::decode_infer() { const int num_points = center_priors.size(); //printf("num_points:%d\n", num_points);

//cv::Mat debug_heatmap = cv::Mat(feature_h, feature_w, CV_8UC3);
for (int idx = 0; idx < num_points; idx++)
{
    const int ct_x = center_priors[idx].x;
    const int ct_y = center_priors[idx].y;
    const int stride = center_priors[idx].stride;

    const float* scores = feats.row(idx);
    float score = 0;
    int cur_label = 0;
    for (int label = 0; label < this->num_class; label++)
    {
        if (scores[label] > score)
        {
            score = scores[label];

... 内存溢出的问题可能是因为strides引起的

jun214384468 avatar Sep 13 '22 07:09 jun214384468

哪里可以找到onnx文件呢?您可以给我提供一份吗?

jun214384468 avatar Sep 13 '22 07:09 jun214384468