iou函数python python函数csdn

YOLOV4简介

其他基础操作:

创新互联专业为企业提供开鲁网站建设、开鲁做网站、开鲁网站设计、开鲁网站制作等企业网站建设、网页设计与制作、开鲁企业网站模板建站服务,十余年开鲁做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

便于分析,将Yolov4 的整体结构拆分四大板块:

(1)输入端:训练时对输入端的改进,主要包括Mosaic数据增强,cmBN,SAT自对抗训练。

(2)BackBone主干网络:将各种新的方式结合起来,包括:CSPDarknet53,Mish激活函数,Dropblock。

(3)Neck:目标检测网络在BackBone和最后的输出层之间往往会插入一些层,比如Yolov4的SPP模块,FPN+PAN结构。

(4)Prediction:输出层的锚框机制和Yolov3相同,主要改进的是训练时的损失函数CIOU_Loss,以及预测框筛选的nms变为DIOU_nms。

(1)Mosaic数据增强。

Yolov4中使用的Mosaic是参考2019年提出的CutMix数据增强的方式,但CutMix只使用了两张图片进行拼接,而Mosaic数据增强则采用了4张图片,随机缩放,随机裁剪,随机排布的方式进行拼接。

(1)CSPDarknet53

CSPDarknet53是在Yolov3主干网络Darknet53的基础上,借鉴2019年的CSPNet的经验,产生的Backbone结构,其中包含了5个CSP模块。

Backbone中卷积层的数量:

每个CSP模块前面的卷积核大小都是3x3,步长为2,因此可以起到下采样的作用。

因为Backbone有5个CSP模块,输入图像是608 x 608,所以特征图的变化规律是:608-304-152-76-38-19

经过5次CSP模块后得到19*19大小的特征图。

而且作者只在Backbone中采用Mish激活函数,网络后面任然采用Leaky_relu激活函数。

CSPNet的作者认为推理计算过高的问题是由于网络优化中的 梯度信息重复 导致的。

因此采用CSP模块先将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将他们合并,在减少计算量的同时可以保证准确率。

因此Yolov4在主干网络Backbone采用 CSPDarknet53网络结构 ,主要是有三个方面的优点:

Yolov4中使用的Dropblock,其实和常见网络中的Dropout功能类似,也是一种缓解过拟合的一种正则化方式。

传统的Dropout很简单: 随机删除减少神经元的数量,使网络变得更简单。

这种方式其实是借鉴2017年的Cutout数据增强的方式,cutout是将输入图像的部分区域清零,而Dropblock则是将Cutout应用到每一个特征图。而且并不是用固定的归零比率,而是在训练时以一个小的比率开始,随着训练过程线性的增加这个比率。

Dropblock 与 Cutout数据增强 对训练效果进行对比验证时,发现几个优点:

在目标检测领域,为了更好的提取融合特征,通常在Backbone和输出层,会插入一些层,这个部分称为Neck。

Yolov4的Neck结构主要采用了SPP模块,FPN+PAN的方式。

(1)SPP模块

SPP模块 在Backbone的主干网络之后:

(2)FPN+PAN

PAN结构是借鉴 2018年图像分割领域PANet的创新点

看下Yolov3和Yolov4中是如何设计的。

前面CSPDarknet53中讲到,每个CSP模块前面的卷积核都是3x3大小,想当于下采样操作。

因此可以看到三个紫色箭头处的特征图是76x76,38x38,19x19。

以及最后Prediction中用于预测的三个特征图:①76×76×255,②38×38×255,③19×19×255。

我们也看下Neck部分的立体图像,看下两部分是如何通过FPN+PAN结构进行融合的。

原本的PANet网络的PAN结构中,两个特征图结合是采用shortcut操作,而Yolov4中则采用concat 操作,特征图融合后的尺寸发生了变化。

(1)CIOU_loss

目标检测任务的损失函数一般由Classificition Loss(分类损失函数)和Bounding Box Regeression Loss(回归损失函数)两部分构成。

Bounding Box Regeression的Loss近些年的发展过程是: Smooth L1 Loss- IoU Loss(2016)- GIoU Loss(2019)- DIoU Loss(2020)-CIoU Loss(2020)

从最常用的 IOU_Loss 开始,进行对比拆解分析,看下Yolov4为啥要选择 CIOU_Loss 。

-------------------------------------------------------IOU_loss------------------------------

问题一 :即状态1的情况,当预测框和目标框不相交时,IOU=0,无法反应两个框距离的远近,此时损失函数不可导,IOU_Loss无法优化两个框不相交的情况。

问题二 :即状态2和状态3的情况,当两个预测框大小相同,两个IOU也相同,IOU_Loss无法区分两者相交情况的不同。

因此2019年出现了GIOU_Loss来进行改进。

-------------------------------------------------------GIOU-------------------------------------

看到上图的GIOU_loss中,增加了相交尺度的衡量方式,缓解了 单纯IOU_Loss 时的尴尬。

但为什么仅仅说缓解呢?因为还存在一种不足:

基于这个问题, 2020年的AAAI又提出了DIOU_Loss 。

------------------------------------------------DIOU_Loss------------------------------------------------------------

好的目标框回归函数应该考虑三个重要的几何因素: 重叠面积,中心点距离,长宽比。

针对IOU和GIOU存在的问题,作者从两个方面进行考虑

一:如何最小化预测框和目标框之间的归一化距离?

二:如何在预测框和目标框重叠时,回归的更准确?

针对第一个问题,作者提出了DIOU_Loss

-----------------------------------------------------------CIOU_Loss-----------------------------------------------------

CIOU_Loss 和 DIOU_Loss 前面的公式都是一样的,不过在此基础上还增加了一个 影响因子 ,将预测框和目标框的长宽比都考虑了进去。

这样CIOU_Loss就将目标框回归函数应该考虑三个重要几何因素:重叠面积、中心点距离,长宽比全都考虑进去了。

再来综合的看下各个Loss函数的不同点:

nms主要用于预测框的筛选,YOLOV4将其中计算IOU的部分替换成DIOU的方式

在上图重叠的摩托车检测中,中间的摩托车因为考虑边界框中心点的位置信息,也可以回归出来。

因此在重叠目标的检测中,DIOU_nms的效果优于传统的nms。

注意 :为什么不用CIOU_nms,而用DIOU_nms?

因为前面讲到的CIOU_loss,实在DIOU_loss的基础上,添加的影响因子,包含groundtruth标注框的信息,在训练时用于回归。

但在测试过程中,并没有groundtruth的信息,不用考虑影响因子,因此直接用DIOU_nms即可。

你好 请问你一下iou是怎么抓包?

有两种方法。。一种就是把iou2net.pl脚本把端口都桥接到VM里面的一个网卡。然后VM那个网卡在桥接到本机的网卡。。在本机抓VM桥接过来的网卡就可以咯。。还有一种就是直接在linux里面抓包。首先要在linux安装抓包软件。。我就在线装咯。。红帽系列的系统(centos redhat fedora等)就用yum install wireshark安装,如果是debian系列(如ubuntu 等)的就用apt-get install wireshark安装好后,要用到py2net.py和changL2.py这两脚本。。py2net.py这个可以把你的单个网卡桥接多个虚拟路由器实例。具体步骤如下。首先运行py2net.py脚本,然后修改网卡模式为混杂模式,

ifconfig ethX promisc 。最后开始抓包。python -u changL2.py eth | tshark -i ethX -w test.cap就开始抓包咯。。。按ctrl+C停止抓包。。OK咯。。

分割网络评价指标:Dice与IOU的区别

1. Dice loss与IOU loss哪个用于网络模型的训练比较好?

答曰: 它俩都不太好。它俩都是一种metric learning的衡量方式,两者都存在训练过程不稳定的问题,在和很小的情况下会得到较大的梯度,会影响正常的反向传播。一般情况下,使用两者对应的损失函数的原因是 分割的真实目的是最大化这两个度量指标,而交叉熵是一种代理形式 ,利用了其在反向传播中易于最大化优化的特点。

所以,正常情况下是使用交叉熵损失函数来训练网络模型,用Dice或IOU系数来衡量模型的性能。因为,交叉熵损失函数得到的交叉熵值关于logits的梯度计算形式类似:p-g(p是softmax的输出结果,g是ground truth),这样的关系式自然在求梯度的时候容易的多。而Dice系数的可微形式,loss值为2pg/(p^2 + g^2)或2pg/(p+g),其关于p的梯度形式显然是比较复杂的,且在极端情况下(p,g的值都非常小时) 计算得到的梯度值可能会非常大,进而会导致训练不稳定 。

[需要回顾一下网络模型训练过程中的反向传播过程,以及梯度值的计算 ]

Dice loss 训练中存在的问题,训练得到的误差曲线非常混乱,很难看出关于收敛的信息,虽然其可以检查在验证集上的误差来避开。 但依旧还是不常用。

2. Dice系数和IOU系数定义是什么?

答曰: 它俩都是计算集合相似度的度量函数。通常用来计算两个样本的相似度,取值范围是[0,1].

首先明确四个定义:

1. TP (True Positive): 预测结果是正值,实际也是正值,说明预测正确;

2.FP(False Positive):预测结果是正值,实际上该像素值是负值,说明模型把负值误判为正值,模型预测错误;

3.TN(True Negative) : 预测结果是负值,实际也是负值,说明模型预测正确;

4.FN (False Negative):预测结果是负值,实际上该像素值是正值,说明模型把正值误判为负值,模型预测错误。

Dice系数 和 IOU系数的计算以及两者的计算关系如下图所示:

其中,|X ∩Y|近似为预测图与真值之间的点乘,并将点乘的元素结果相加。对于二值图像,真值label中的像素值,只有0和1,点乘操作之后,会将预测结果中非预测对象部分(即两个图像的像素位置是一一对应的,预测结果图像中不是要预测的像素位置的像素值清零),对于激活的像素值,则根据对应的像素值的大小来惩罚低置信度的预测,较高的值会得到更好的Dice系数);|X|,|Y|,可以采用像素值相加和或像素值平方求和来计算。

这两个指标对应的loss就是直接用1-对应的系数公式即可。

IOU值的计算(目标检测相关)

该函数计算selectivesearch算法产生的候选框与样本的标注框之间的IOU,ver1中,前两个值为产生的boxes的左下角坐标。verticel2为样本标注框的左下角和右上角的坐标。


网页名称:iou函数python python函数csdn
转载注明:http://hbruida.cn/article/doshgii.html