Toybrick

rk3399pro运行yolov4,推理结果检测框特别多

CQQQQQQQQQQ

注册会员

积分
91
楼主
发表于 2021-6-22 17:00:37    查看: 9377|回复: 4 | [复制链接]    打印 | 只看该作者
使用rk3399pro 运行YOLOv4,推理结果如下图所示,每个物体都有好几个检测框套在一起,大家有碰到类似的问题吗?求大佬赐教!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

jefferyzhang

版主

积分
13578
沙发
发表于 2021-6-23 08:59:44 | 只看该作者
不做NMS?
回复

使用道具 举报

CQQQQQQQQQQ

注册会员

积分
91
板凳
 楼主| 发表于 2021-6-23 09:17:24 | 只看该作者
本帖最后由 CQQQQQQQQQQ 于 2021-6-23 09:18 编辑

做了NMS的,我上按照论坛上面的yolov3 C++代码写的,请问是这里出问题了吗?


float overlap(float x1,float w1,float x2,float w2){
        float l1=x1-w1/2;
        float l2=x2-w2/2;
        float left=l1>l2? l1:l2;
        float r1=x1+w1/2;
        float r2=x2+w2/2;
        float right=r1<r2? r1:r2;
        return right-left;
}

float box_intersection(box a, box b)
{
    float w = overlap(a.x, a.w, b.x, b.w);
    float h = overlap(a.y, a.h, b.y, b.h);
    if(w < 0 || h < 0) return 0;
    float area = w*h;
    return area;
}

float box_union(box a, box b)
{
    float i = box_intersection(a, b);
    float u = a.w*a.h + b.w*b.h - i;
    return u;
}

float box_iou(box a, box b)
{
    return box_intersection(a, b)/box_union(a, b);
}

int nms_comparator(const void *pa, const void *pb)
{
    detection a = *(detection *)pa;
    detection b = *(detection *)pb;
    float diff = 0;
    if(b.sort_class >= 0){
        diff = a.prob[b.sort_class] - b.prob[b.sort_class];
    } else {
        diff = a.objectness - b.objectness;
    }
    if(diff < 0) return 1;
    else if(diff > 0) return -1;
    return 0;
}

int do_nms_sort(detection *dets, int total, int classes, float thresh)
{
    int i, j, k;
    k = total-1;
    for(i = 0; i <= k; ++i){
        if(dets.objectness == 0){
            detection swap = dets;
            dets = dets[k];
            dets[k] = swap;
            --k;
            --i;
        }
    }
    total = k+1;
        //cout<<"total after OBJ_THRESH: "<<total<<"\n";

    for(k = 0; k < classes; ++k){
        for(i = 0; i < total; ++i){
            dets.sort_class = k;
        }
        qsort(dets, total, sizeof(detection), nms_comparator);
        for(i = 0; i < total; ++i){
            if(dets.prob[k] == 0) continue;
            box a = dets.bbox;
            for(j = i+1; j < total; ++j){
                box b = dets[j].bbox;
                if (box_iou(a, b) > thresh){
                    dets[j].prob[k] = 0;
                }
            }
        }
    }
        return total;
}



回复

使用道具 举报

jefferyzhang

版主

积分
13578
地板
发表于 2021-6-23 09:22:52 | 只看该作者
调整下参数啊...
重叠比例改大不就好了
回复

使用道具 举报

CQQQQQQQQQQ

注册会员

积分
91
5#
 楼主| 发表于 2021-6-23 09:56:25 | 只看该作者
jefferyzhang 发表于 2021-6-23 09:22
调整下参数啊...
重叠比例改大不就好了

找到问题了,outputs_transform函数里面的mask_0,mask_1,mask_2和anchors的值 需要按照yolov4.cfg里面的设置做出相应的修改,
谢谢大佬的提醒
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表