zoukankan      html  css  js  c++  java
  • 用IOC过滤重叠框

    通过tensorflow的物体检测detection object识别图片里的object会检测到不同类型及评分的box,不同类别的box之间可能会出现重叠,为了使结果更加的准确需要对重叠box进行过滤

    过滤前过滤后

    方案:

    一个object里不会包含其它的object,这个具体因需求而异。

    1、过滤到评分低的框

    2、判断两个框是否存在交集

    3、存在包含关系则淘汰掉评分低的

    4、交并比大于50%则淘汰掉评分低的

    5、交并比小于50%,但是大于某一相交面积的50%则移除那个相交面积

    代码:

    #执行去重
        def doRemoveOverlap(self,box1,box2,box1_score,box2_score):
            #boxesItem.append(item['ymin'],item['xmin'],item['ymax'],item['xmax'])
            box1_xmin = box1[1]
            box1_ymin = box1[0]
            box1_xmax = box1[3]
            box1_ymax = box1[2]
            box2_xmin = box2[1]
            box2_ymin = box2[0]
            box2_xmax = box2[3]
            box2_ymax = box2[2]
            # 1、判断两个框是否存在交集,不存在则返回
            if (box2_xmin >= box1_xmax or box2_xmax <= box1_xmin):
                return 0;
            if (box2_ymin >= box1_ymax or box2_ymax <= box1_ymin):
                return 0;
            #2、存在包含关系则淘汰掉评分低的
            if((box2_xmax <= box1_xmax and box2_xmin >= box1_xmin) and (box2_ymax <= box1_ymax and box2_ymin >= box1_ymin)):
                if(box1_score>=box2_score):
                    return 2
                else:
                    return 1
            if ((box1_xmax <= box2_xmax and box1_xmin >= box2_xmin) and (
                    box1_ymax <= box2_ymax and box1_ymin >= box2_ymin)):
                if (box2_score >= box1_score):
                    return 1
                else:
                    return 2
            #3、交并比大于50%则淘汰掉评分低的
            area_bagbox = (box1_xmax - box1_xmin) * (box1_ymax - box1_ymin)
            area_bottle = (box2_xmax - box2_xmin) * (box2_ymax - box2_ymin)
            xx1 = max(box1_xmin, box2_xmin)
            yy1 = max(box1_ymin, box2_ymin)
            xx2 = min(box1_xmax, box2_xmax)
            yy2 = min(box1_ymax, box2_ymax)
            area_intersection = max(0, xx2 - xx1) * max(0, yy2 - yy1)
            iou=area_intersection/(area_bagbox+area_bottle-area_intersection)
            if(iou>0.5):
                if (box1_score >= box2_score):
                    return 2
                else:
                    return 1
            elif(area_intersection>area_bagbox*0.5):#交并比小于50%,但是大于某一相交面积的50%则移除那个相交面积
                return  1
            elif(area_intersection>area_bottle*0.5):
                return 2
            return 0;
    
        #对照片去重叠,返回保留下来的
        def doRemoveOverlapPhoto(self,boxes,scores,min_score):
            for index1,box1 in enumerate(boxes):
                score1 = scores[index1]
                if(score1<min_score):
                    boxes[index1] = None
                    continue
                if(box1!=None and score1>=min_score):
                    for index2,box2 in enumerate(boxes):
                        if(box2!=None):
                            if(index1!=index2):
                                #评分小于最小评分的直接移除
                                score2=scores[index2]
                                if(score2<min_score):
                                    boxes[index2] = None
                                    continue
                                result=self.doRemoveOverlap(box1,box2,scores[index1],scores[index2])
                                #将要移除的项设置为None,0不移除,1移除index1,2移除index2
                                if(result==1):
                                    boxes[index1]=None
                                elif(result==2):
                                    boxes[index2] = None
            # filter(None,boxes)#过滤掉None
            remainOverlapList=[];#剩下的box
            for item in boxes:
                if(item!=None):
                    remainOverlapList.append(item)
            return remainOverlapList;

    IOU:

    交并比,两个框相交的面积/并积

    参考:https://blog.csdn.net/lanchunhui/article/details/71190055

    本博客所有内容均为原创,转载请注明出处!谢谢
  • 相关阅读:
    python 中的深拷贝和浅拷贝
    时间复杂度
    为什么l1和l2可以防止过拟合
    逻辑回归实现多分类
    《深入浅出数据分析》读书笔记
    牛客网的输入和输出
    万物皆可embedding
    NLP中的mask的作用
    不同语言对单例模式的不同实现
    ElasticSearch 索引 VS MySQL 索引
  • 原文地址:https://www.cnblogs.com/hepc/p/8887996.html
Copyright © 2011-2022 走看看