首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何匹配包围盒坐标的地球真相和预测的部分?

如何匹配包围盒坐标的地球真相和预测的部分?
EN

Stack Overflow用户
提问于 2022-09-05 07:59:25
回答 1查看 210关注 0票数 0

我做过模特。我有100个成组技术和预测部件的包围盒。我想计算每个欠条的记分。但我不能直接这么做,因为有命令。包围盒的坐标顺序是不同的。例如,gt的第一个边界框与预测的第43个边界框重叠。我试图找到匹配的订单,并使用以下代码计算每个订单的iou:

代码语言:javascript
复制
for i in range (0,100):
    for j in range(0,100):
        
        pxmin,pymin,pxmax,pymax=pred['boxes'][i]
        gtxmin,gtymin,gtxmax,gtymax=gt[j]
       

        ixmin=max(pxmin,gtxmin)
        ixmax=min(pxmax,gtxmax)
        iymin=max(pymin,gtymin)
        iymax=min(pymax,gtymax)
    
        parea=(pxmax-pxmin)*(pymax-pymin)
        gtarea=(gtxmax-gtxmin)*(gtymax-gtymin)
        iarea=(ixmax-ixmin)*(iymax-iymin)
        IOU=iarea/(parea+gtarea-iarea)
        
        if 1>IOU>0.7:
            print(i,j,np.array(IOU))

但这一次,它为每个订单匹配不同的订单不止一次,甚至他们没有重叠。例如:

代码语言:javascript
复制
0 43 0.9042958
0 44 0.9875165
0 58 0.9222096
1 16 0.7543962
1 41 0.9221437
2 26 0.90981704
....

我不能拿最高的欠条分,因为他们有的没有重叠,即使他们有最高的欠条score.How,我能解决这个问题吗?

新版本:

代码语言:javascript
复制
ious = np.zeros((100, 100))
for i in range (0,100):
    for j in range(0,100):
        pxmin,pymin,pxmax,pymax=pred['boxes'][i]
        gtxmin,gtymin,gtxmax,gtymax=gt[j]
        ixmin=max(pxmin,gtxmin)
        ixmax=min(pxmax,gtxmax)
        iymin=max(pymin,gtymin)
        iymax=min(pymax,gtymax)
        parea=(pxmax-pxmin)*(pymax-pymin)
        gtarea=(gtxmax-gtxmin)*(gtymax-gtymin)
        if (ixmax - ixmin) < 0 and (iymax - iymin) < 0:
            iarea = 0
        else:
            iarea = (ixmax - ixmin) * (iymax - iymin)
        IOU=iarea/(parea+gtarea-iarea)
        ious[i, j] = IOU
        if 1>IOU>0.6:
            print(np.array(ious))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-05 08:49:03

问题是,如果iarea(ixmax-ixmin)都为负值(在这种情况下不存在交集),则代码片段将为IOU分配一个正值,从而导致正IOU

一个快速的解决办法是:

代码语言:javascript
复制
for i in range (0,100):
    for j in range(0,100):
        
        pxmin,pymin,pxmax,pymax=pred['boxes'][i]
        gtxmin,gtymin,gtxmax,gtymax=gt[j]
       

        ixmin=max(pxmin,gtxmin)
        ixmax=min(pxmax,gtxmax)
        iymin=max(pymin,gtymin)
        iymax=min(pymax,gtymax)
    
        parea=(pxmax-pxmin)*(pymax-pymin)
        gtarea=(gtxmax-gtxmin)*(gtymax-gtymin)
        if (ixmax - ixmin) < 0 and (iymax - iymin) < 0:
            iarea = 0
        else:
            iarea = (ixmax - ixmin) * (iymax - iymin)
        IOU=iarea/(parea+gtarea-iarea)
        
        if 1>IOU>0.7:
            print(i,j,np.array(IOU))

请注意,使用numpy可以更有效地完成此任务(如果您愿意的话,我可以提供一个示例)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73606209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档