手写IoU(u音标手写怎么写)

IoU(IntersectionoverUnion)矩形框的IoU计算:矩阵T的左下角坐标,右上角坐标;矩阵G的左下角坐标,右上角坐标;在确定坐标的情况下,与是可知的常量,所以,我们只需要求解即可。这里我们先来看一下水平方向上的情况:从上述的三种情况中我们可以看出:当有重叠或者是内含的情况时,我们可以通过计算得到重叠部分的长度….

大家好,又见面了,我是你们的朋友全栈君。

IoU(Intersection over Union)

矩形框的IoU计算:

        手写IoU(u音标手写怎么写)

矩阵T的左下角坐标(X_{0},Y_{0}),右上角坐标(X_{1},Y_{1})

矩阵G的左下角坐标(A_{0},B_{0}),右上角坐标(A_{1},B_{1})

IoU = \frac{area(ROI_{T})\bigcap area(ROI_{G})}{S_{XY}+S_{AB}-area(ROI_{T})\bigcap area(ROI_{G})}

在确定坐标的情况下,S_{XY}S_{AB}是可知的常量,所以,我们只需要求解area(ROI_{T})\bigcap area(ROI_{G})即可。

这里我们先来看一下水平方向上的情况:

手写IoU(u音标手写怎么写)

从上述的三种情况中我们可以看出: 

当有重叠或者是内含的情况时,我们可以通过  W = min(X_{1},A_{1}) - max(X_{0},A_{0})  计算得到重叠部分的长度.

当满足第一种情况时,发现W<=0.

竖直方向上的处理方式类似,得到H.

代码:

A:
左下角坐标(left_x,left_y)
右上角坐标(right_x,right_y)
B:
左下角坐标(left_x,left_y)
右上角坐标(right_x,right_y)

def IOU(rectangle A, rectangleB):
    W = min(A.right_x, B.right_x) - max(A.left_x, B.left_x)
    H = min(A.right_y, B.right_y) - max(A.left_y, B.left_y)
    if W <= 0 or H <= 0:
        return 0;
    SA = (A.right_x - A.left_x) * (A.right_y - A.left_y)
    SB = (B.right_x - B.left_x) * (B.right_y - B.left_y)
    cross = W * H
    return cross/(SA + SB - cross)

语义分割的IoU计算:

IoU一般都是基于类进行计算的,也有基于图片计算的。一定要看清数据集的评价标准。
基于类进行计算的IoU就是将每一类的IoU计算之后累加,再进行平均,得到的就是基于全局的评价,所以我们求的IoU其实是取了均值的IoU,也就是均交并比(mean IoU)

计算公式一样:

                     手写IoU(u音标手写怎么写)

手写IoU(u音标手写怎么写)

 先贴代码:

def compute_ious(pred, label, classes):
    '''computes iou for one ground truth mask and predicted mask'''
    ious = [] # 记录每一类的iou
    for c in classes:
        label_c = (label == c) # label_c为true/false矩阵
        pred_c = (pred == c)
        intersection = np.logical_and(pred_c, label_c).sum()
        union = np.logical_or(pred_c, label_c).sum()
        if union == 0:
            ious.append(float('nan'))  
        else
            ious.append(intersection / union)
    return np.nanmean(ious) #返回当前图片里所有类的mean iou

def compute_iou_batch(preds, labels, classes=None):
    '''computes mean iou for a batch of ground truth masks and predicted masks'''
    ious = []
    preds = np.copy(preds) # copy is imp
    labels = np.array(labels) # tensor to np
    for pred, label in zip(preds, labels): # iter one batch
        ious.append(compute_ious(pred, label, classes))
    iou = np.nanmean(ious) # mean iou of one batch
    return iou

基于类计算的IoU时,输入pred和label的size可以有多种形式:

假设原图大小为(256\times 1600),期望识别的目标有四种,label的形式是一张图片对应一份mask[0,1,2,3,4],0代表背景类。则根据label生成的mask为(1\times256\times1600),这层mask的取值为0/1/2/3/4,则pred和label的大小都是(1\times256\times1600)classes=[1,2,3,4],这里忽略背景类classes=[0]的计算。此时,分别对class=1,2,3,4计算iou,并返回它们的均值。代码如上。

假设原图大小为(256\times 1600),期望识别的目标有四种,label的形式是一张图片对应四份二进制mask[0,1],则根据label生成的mask为(4\times256\times1600),这四层mask的取值为0/1,则pred和label的大小都是(4\times256\times1600)classes=[1]。此时,一起计算四类的iou,并返回。即上述代码中compute_ious里的ious只有一个值。(不要问我为什么要这样处理标签,做的一个比赛给的标签就是这样的orz…)

至于基于图片怎么计算IoU,暂时还没用到.

参考:语义分割的评价指标——IoU

           两个矩形的交并比(IOU)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128817.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • gulp pipe缓存_gulp使用教程

    gulp pipe缓存_gulp使用教程首先,gulp的源码里没有任何一部分是定义pipe的。gulp的pipe方法是来自nodejsstreamAPI的。gulp本身是由一系列vinyl模块组织起来的。pipe方法到底是什么呢?pipe跟他字面意思一样只是一个管道例如我有一堆文件var s=gulp.src(["fileA","fileB","fileC"])src方法实际上是’vinyl-fs’模…

    2025年5月22日
    3
  • 给intellij IDEA设置背景颜色[通俗易懂]

    设置背景颜色有两种方法,接下来我给大家介绍一下第一种方法:先打开intellijIDEA之后在File再点Settings(如图)

    2022年4月13日
    105
  • java启动命令参数_centos配置java环境变量

    java启动命令参数_centos配置java环境变量问题说明为了分析和定位一个Java线上系统问题,我们需要查看JVM启动时的一些参数设置,例如:垃圾回收算法、堆大小等等。这些参数可能在启动脚本中明确指明,也可能采用默认值。在系统运行过程中其他人也许动态调整了系统参数。问题解决通过jps命令找对对应的进程号[root@swk-207~]#jps-lm|grepxk17743/xxx/server/skynet/lib/skynet-cl…

    2022年8月24日
    6
  • java jwt 单点登录_jwt技术实现系统间的单点登录「建议收藏」

    java jwt 单点登录_jwt技术实现系统间的单点登录「建议收藏」阅读文本大概需要3分钟。单点登录(singlesignon),简称sso。它的定义是多个应用系统间,只需要登录一次就可以访问所有相互信任的应用系统。下面介绍用jwt技术如何来实现单点登录。一、JWT定义及其组成JWT(JSONWEBTOKEN)是一个非常轻巧的规范,这个规范允许我们使用jwt在客户端和服务器之间传递安全可靠的信息。JWT由3个部分组成,分别是头部、载荷、签名。头部部分{“a…

    2022年5月11日
    44
  • 达梦数据库备份还原使用

    达梦数据库备份还原使用达梦数据库备份还原使用一、关于备份二、物理备份三、逻辑备份一、关于备份1、备份的作用:①、防止误操作②、软硬件故障,做恢复③、防止天灾2、备份的方式:逻辑备份和物理备份3、备份的介质:磁盘,磁带,光盘支持第三方的备份软件:如上海爱数,鼎甲等。二、物理备份物理备份分为:冷备和热备冷备:DMAP服务是打开的,数据库实例是关闭的方式1:利用控制台工具去备2、DMRM…

    2022年5月14日
    56
  • RabbitMQ入门案例【java资源库:http://www.gxcode.top/code】[通俗易懂]

    一.编写RabbitMQ入门案例一.搭建项目1.创建maven项目(springboot-jar)2.修改pom.xml文件org.springframework.bootspring-boot-starter-parent2.0.2.RELEASEorg.springframework.bootspring-boot-starter-weborg.spring…

    2022年4月8日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号