GIOU loss+DIOU loss+CIOU loss

一.IOU 

1.GIOU解决没有交集的框,IOU为0,其损失函数导数为0,无法优化的问题。

图1 GIOU,IOU,l2范数差异

a)可看出 l2值一样,IOU值是不一样的,说明L1,L2这些Loss用于回归任务时,不能等价于最后用于评测检测的IoU.

b)可看出当框有包含关系,GIOU就退化为IOU

其是找到一个最小的封闭形状C,让C可以将A和B包围在里面,然后我们计算C中没有覆盖A和B的面积占C总面积的比例S.

GIOU = IOU - S

可看出,GIOU<=IOU

当A==B,GIOU=1,当A B两框离得很远,GIOU趋近于-1.

图2 GIOU 计算公式

GIOU loss:

 

GIOU的损失函数算法:

1.代码 

import numpy as np
def Giou(box1, box2):xmin1, ymin1, xmax1, ymax1 = box1xmin2, ymin2, xmax2, ymax2 = box2xx1 = np.max([xmin1, xmin2])yy1 = np.max([ymin1, ymin2])xx2 = np.min([xmax1, xmax2])yy2 = np.min([ymax1, ymax2])# 计算两个矩形框面积area1 = (xmax1-xmin1) * (ymax1-ymin1)area2 = (xmax2-xmin2) * (ymax2-ymin2)inter_area = (np.max([0, xx2-xx1])) * (np.max([0, yy2-yy1]))#计算交集面积iou = inter_area / (area1+area2-inter_area+1e-6)#计算交并比print('===inter_area:', inter_area)print('===iou:', iou)#两个框的包围面积area_C = (max(xmin1, xmax1, xmin2, xmax2) - min(xmin1, xmax1, xmin2, xmax2)) *\(max(ymin1, ymax1, ymin2, ymax2) - min(ymin1, ymax1, ymin2, ymax2))print('==area_C:', area_C)end_area = (area_C - (area1+area2-inter_area)) / area_C  #闭包区域中不属于两个框的区域占闭包区域的比重giou = iou - end_areaprint('===giou:', giou)return gioubox1 = [0, 0, 2, 2]
box2 = [1, 1, 3, 3]
# box2 = [5, 5, 7, 7]
Giou(box1, box2)

优点:

相比于IOU,优化无IOU情况。

相比于L1,L2loss,更能直观表示框与框之间关系。

二.DIOU

基于IoU和GIoU存在的问题:
1. 直接最小化anchor框与目标框之间的归一化距离是否可行,以达到更快的收敛速度?
2. 如何使回归在与目标框有重叠甚至包含时更准确、更快?

3.当目标框完全包裹预测框的时候,IoU和GIoU的值都一样,此时GIoU退化为IoU, 无法区分其相对位置关系.

其中,b,bgt分别代表了预测框和真实框的中心点,p2代表计算两个中心点间的欧式距离。 c2代表的是能够同时包含预测框和真实框的最小闭包区域的对角线距离。

DIoU loss可以直接最小化两个目标框的距离,因此比GIoU loss收敛快得多。

1.DIOU代码

import torch
def Diou(bboxes1, bboxes2):rows = bboxes1.shape[0]cols = bboxes2.shape[0]dious = torch.zeros((rows, cols))if rows * cols == 0:#return diousexchange = Falseif bboxes1.shape[0] > bboxes2.shape[0]:bboxes1, bboxes2 = bboxes2, bboxes1dious = torch.zeros((cols, rows))exchange = True# #xmin,ymin,xmax,ymax->[:,0],[:,1],[:,2],[:,3]w1 = bboxes1[:, 2] - bboxes1[:, 0]h1 = bboxes1[:, 3] - bboxes1[:, 1]w2 = bboxes2[:, 2] - bboxes2[:, 0]h2 = bboxes2[:, 3] - bboxes2[:, 1]area1 = w1 * h1area2 = w2 * h2center_x1 = (bboxes1[:, 2] + bboxes1[:, 0]) / 2center_y1 = (bboxes1[:, 3] + bboxes1[:, 1]) / 2center_x2 = (bboxes2[:, 2] + bboxes2[:, 0]) / 2center_y2 = (bboxes2[:, 3] + bboxes2[:, 1]) / 2inter_max_xy = torch.min(bboxes1[:, 2:], bboxes2[:, 2:])inter_min_xy = torch.max(bboxes1[:, :2], bboxes2[:, :2])print('==inter_min_xy:', inter_min_xy)print('==inter_max_xy:', inter_max_xy)out_max_xy = torch.max(bboxes1[:, 2:], bboxes2[:, 2:])out_min_xy = torch.min(bboxes1[:, :2], bboxes2[:, :2])print('==out_min_xy:', out_min_xy)print('==out_max_xy:', out_max_xy)inter = torch.clamp((inter_max_xy - inter_min_xy), min=0)inter_area = inter[:, 0] * inter[:, 1]inter_diag = (center_x2 - center_x1)**2 + (center_y2 - center_y1)**2outer = torch.clamp((out_max_xy - out_min_xy), min=0)outer_diag = (outer[:, 0] ** 2) + (outer[:, 1] ** 2)union = area1+area2-inter_areadious = inter_area / union - (inter_diag) / outer_diagdious = torch.clamp(dious,min=-1.0, max = 1.0)if exchange:dious = dious.Treturn diousbox1 = torch.from_numpy(np.array([[0, 0, 2, 2]]))
box2 = torch.from_numpy(np.array([[1, 1, 3, 3]]))
Diou(box1, box2)

DIOUloss:

优点:

相比于GIOU,优化距离替换优化面积,收敛速度更快。

解决GIOU的缺点:完全包裹预测框时loss一样的情况。

三.CIOU

DIOU没有考虑到检测框的长宽比。长宽比更接近的边框应当有更低的loss。

 

参考:

https://github.com/Zzh-tju/DIoU-darknet

https://arxiv.org/abs/1911.08287

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《科学》十大年度科学突破反映的新动向

来源&#xff1a;新华网摘要&#xff1a;从测定分子结构到宇宙探索&#xff0c;从发现远古动物到揭示细胞的秘密&#xff0c;美国权威学术刊物《科学》杂志评选的2018年十大科学突破&#xff0c;在时间和空间尺度上拓宽着人类认知的边界&#xff0c;也反映了近年来科学发展的三…

ctpn论文阅读与代码

代码地址: https://github.com/zonghaofan/ctpn_torch 1.通用的目标检测是封闭的,而文字是封闭且连续 2. 构造一系列宽度相等的小文本,回归中心y坐标和高度 3. 对于边界回归x坐标,在进一次修正 4.整个模型就是backbone提取特征,将每个像素点的相邻3*3像素拉成行向量,利用空间…

yum配置与使用

yum配置与使用(很详细) yum的配置一般有两种方式&#xff0c;一种是直接配置/etc目录下的yum.conf文件&#xff0c;另外一种是在/etc/yum.repos.d目录下增加.repo文件。一、yum的配置文件$ cat /etc/yum.conf [main]cachedir/var/cache/yum #yum下载的RPM包的缓存目录k…

新技术不断涌现,下一代云计算的突破口在哪里?

来源&#xff1a;日知录技术社区这是一个IT技术飞速发展的时代&#xff0c;在硬件基础设施的不断升级以及虚拟化网络等技术的日益成熟下&#xff0c;云厂商也正面临着各种新技术带来的巨大挑战。从数据中心的基础建设到云平台的系统构建再到产品底层的技术改革&#xff0c;该如…

生成高斯热力图(craft中有使用)+2d heatmap+3d heatmap

一.生成高斯热力图 from math import exp import numpy as np import cv2 import osclass GaussianTransformer(object):def __init__(self, imgSize512, region_threshold0.4,affinity_threshold0.2):distanceRatio 3.34scaledGaussian lambda x: exp(-(1 / 2) * (x ** 2))…

POP动画[1]

POP动画[1] pop动画是facebook扩展CoreAnimation的,使用及其方便:) 1:Spring系列的弹簧效果(两个动画kPOPLayerBounds与kPOPLayerCornerRadius同时运行) #import "RootViewController.h" #import "YXEasing.h" #import "POP.h" #import "YX…

远比5G发展凶猛!物联网2018白皮书,国内规模已达1.2万亿

来源&#xff1a;智东西摘要&#xff1a;研判物联网的技术产业进展情况&#xff0c;梳理消费物联网、智慧城市物联网、生产性物联网三类物联网应用现状及驱动因素 。在供给侧和需求侧的双重推动下&#xff0c;物联网进入以基础性行业和规模消费为代表的第三次发展浪潮。 5G、 低…

收缩分割多边形(PSENet中有使用)

目的:为了解决密集文本的分割问题 代码: # -*- codingutf-8 -*- import os import cv2 import Polygon as plg import pyclipper import numpy as npdef dist(a, b):return np.sqrt(np.sum((a - b) ** 2))#计算周长 def perimeter(bbox):peri 0.0for i in range(bbox.shape[…

Android 3D emulation 架构理解

Android Emulator 给用户提供 GPU on 选项&#xff0c;意思是利用 Host ( 就是执行 Emulator 的PC机) 的 GPU. 当然PC机必须把 OpenGL 的驱动装好 在实现上就是把 libGLESv1_CM.so libGLESv2.so 替换掉&#xff0c;当system调用 gl的函数的时候&#xff0c;把调用打包为strea…

年度回顾:2018年的人工智能/机器学习惊喜及预测19年的走势

来源&#xff1a;网络大数据考虑到技术变革的速度&#xff0c;我认为让专业IT人士分享他们对2018年最大惊喜及2019年预测的看法会很有趣。以下是他们对人工智能(AI)&#xff0c;机器学习( ML)和其他数据科学迭代的看法&#xff1a;CLARA分析公司首席执行官兼创始人&#xff1a;…

利用dbnet分割条形码与文字(代码+模型)+知识蒸馏+tensorrt推理+利用pyzbar和zxing进行条形码解析

一.DBnet 1.代码链接 分割条形码与文字代码:github链接:GitHub - zonghaofan/dbnet_torch: you can use dbnet to detect word or bar code,Knowledge Distillation is provided,also python tensorrt inference is provided.&#xff08;提供模型&#xff09; 2.论文阅读 …

全球值得关注的11家人脸识别公司与机构

来源&#xff1a;资本实验室根据美国国家标准与技术研究院&#xff08;NIST&#xff09;的2018年全球人脸识别算法测试&#xff08;FRVT&#xff09;最新结果&#xff0c;今年共有来自全球的39家企业和机构参与本次竞赛。在最新排名中&#xff0c;前五名算法被中国公司包揽&…

图论基础知识--最小生成树算法kruskal(克鲁斯克尔)和普里姆算法(Prim算法);最短路径算法Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)

一.基础知识 有向图 无向图 以无向图为例: 邻接矩阵: 度矩阵(对角矩阵): 二&#xff0e;最小生成树 应用&#xff1a;将网络顶点看着城市&#xff0c;边看着城市之间通讯网&#xff0c;边的权重看着成本&#xff0c;根据最小生成树可以构建城市之间成本最低的通讯网&#x…

算法偏见侦探

来源&#xff1a;AI 科技评论摘要&#xff1a;随着越来越多的算法不断渗透入社会的层层面面&#xff0c;如医疗机构、政府部门&#xff0c;对算法偏见的讨论越来越多。这个月&#xff0c;Nature 杂志评选出 2018 年最受欢迎的十大科学长篇专题报道&#xff0c;其中&#xff0c;…

pytorch实现常用的一些即插即用模块(长期更新)

1.可分离卷积 #coding:utf-8 import torch.nn as nnclass DWConv(nn.Module):def __init__(self, in_plane, out_plane):super(DWConv, self).__init__()self.depth_conv nn.Conv2d(in_channelsin_plane,out_channelsin_plane,kernel_size3,stride1,padding1,groupsin_plane)…

硅片行业:过剩背景下的寡头市场

来源&#xff1a;乐晴智库精选▌竞争格局:过剩背景下的寡头市场&#xff0c;规模壁垒初步形成光伏产业总体处于产能过剩的状态&#xff0c;硅片环节的过剩尤为突出。根据PVInfolink的统计数据&#xff0c;截至2018年2季度末&#xff0c;全球硅片总产能超过160GW&#xff0c;年化…

从attention到Transformer+CV中的self-attention

一.总体结构 由于rnn等循环神经网络有时序依赖&#xff0c;导致无法并行计算&#xff0c;而Transformer主体框架是一个encoder-decoder结构&#xff0c;去掉了RNN序列结构&#xff0c;完全基于attention和全连接。同时为了弥补词与词之间时序信息&#xff0c;将词位置embedding…

12年后,人工智能和人类会是什么样?这是900位专家的看法|报告

来源&#xff1a;机器之能摘要&#xff1a;有分析师预计&#xff0c;到2030年&#xff0c;在复杂的数字系统中&#xff0c;人们将更加依赖于网络人工智能。 有人说&#xff0c;随着对这些网络工具的广泛使用&#xff0c;我们将继续沿着历史的轨迹生活地更好。也有一些人说&…

水印去除(基于nosie2noise优化 代码+模型)

github链接 1.感受野计算: :本层感受野; :上层感受野; :第i层卷积或池化的步长 k:本层卷积核大小 2.空洞卷积卷积核计算:Kk(k-1)(r-1)&#xff0c;k为原始卷积核大小&#xff0c;r为空洞卷积参数空洞率&#xff0c;带入上式即可计算空洞卷积感受野&#xff1b; 3.针对noi…

广度深度都要,亚马逊是如何推动 Alexa 内生成长的?

来源&#xff1a;雷锋网摘要&#xff1a;发展到今天&#xff0c;Alexa 已经成为亚马逊旗下最重要的几个业务支柱之一&#xff0c;尤其是在人工智能语音助手层面&#xff0c;它和 Google Assistant、Apple Siri、Microsoft Cortana 并驾齐驱&#xff0c;甚至在应用场景上有领先之…