首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >联合计算平均交点

联合计算平均交点
EN

Data Science用户
提问于 2018-05-07 09:08:23
回答 2查看 2.8K关注 0票数 3

我希望在一个带有神经网络的分割模型中对每个类都有一个全局IoU度量。其思想是,一旦对网络进行训练,对所有的训练示例进行前向传递--计算IoU,我在考虑两种方法(每一类):1)计算每个训练实例的IoU,最后,计算平均IoU (每类) 2)沿着所有训练实例(每班)累加交叉和合并,最后取比率。

为了说明这个问题,让我们以两个训练实例为例,对于class=0,intersection_1 = 2,intersection_2 = 3,union_1=7,union_2=6,平均IoU (方法1)为0.3929,第二个方法为5/13 = 0.3846。你认为哪种方法能带来更好的结果?

EN

回答 2

Data Science用户

回答已采纳

发布于 2018-05-07 17:56:22

如果您的所有图像和对象都具有合理的大小,这两种方法通常不会有太大的区别。合理地说,我的意思是你没有在一些只有几像素大的物体上工作。

我通常更喜欢第二种方法。一个特别的原因是,你不必担心I和U都是0的情况,这种情况在你的训练阶段开始时就会频繁发生。

根据我的经验,大多数机器学习软件都采用第二种方法。例如,Tensorflow中的mean_iou只是在计算每个类的IoU之前将输入张量简化为一个向量。

票数 1
EN

Data Science用户

发布于 2020-09-26 00:48:41

根据我的经验,这两种方法可以得到完全不同的结果。在您提供的示例中,它并没有真正显示出来,因为大小是相似的。但是,在某些情况下,在对象检测中,可以在两幅图像中以非常不同的大小出现相同的对象。您的第一种方法将对IoUs进行同等的权衡,而第二种方法将给更大的对象更多的权重。我在网上找到的用于计算平均IoU的脚本似乎是第二种方法,但在我看来,不管类的大小如何,每个类的实例都应该得到相同的权重。

编辑

第一种方法是:\frac{1}{n}\sum\frac{i_i}{u_i}

第二个是:\frac{\sum i_i}{\sum u_i}

假设我们正在检测两个对象,第一个对象非常小,并且检测得很好。它有20个像素的交集和21个像素的合并。第二个对象非常大,检测得很差。它的交点为20个像素,并为200。第一种方法的平均IoU为0.52,而第二种方法的IoU为0.18。第一种方法分别处理每个对象检测,平均每个对象检测值,有效地赋予每个对象检测相同的权重。第二种方法倾向于较大的对象。

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

https://datascience.stackexchange.com/questions/31320

复制
相关文章

相似问题

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