
正文
iou函数python iou函数 python
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
YOLOV4简介
其他基础操作:
便于分析iou函数python,将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只使用iou函数python了两张图片进行拼接,而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即可。
相关问答
Q1: IOU值的计算(目标检测相关)
该函数计算selectivesearch算法产生的候选框与样本的标注框之间的IOU,ver1中,前两个值为产生的boxes的左下角坐标。verticel2为样本标注框的左下角和右上角的坐标。
Q2: 你好 请问你一下iou是怎么抓包?
有两种方法。。一种就是把iou2net.pl脚本把端口都桥接到VM里面iou函数python的一个网卡。然后VM那个网卡在桥接到本机的网卡。。在本机抓VM桥接过来的网卡就可以咯。。还有一种就是直接在linux里面抓包。首先要在linux安装抓包软件。。iou函数python我就在线装咯。。红帽系列的系统(centos redhat fedora等)就用yum install wireshark安装iou函数python,如果是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咯。。
关于iou函数python和iou函数 python的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






