YOLO级数是一种基于深度学习的回归方法。
RCNN、FAST-RCNN和Fast-RCNN是基于深度学习的分类方法。
https://github.com/pjreddie/darknet YOLO官方网站
YOLOV1论文下载:https://arxiv.org/abs/1506.02640
下载代码:https://github.com/pjreddie/darknet
核心思想:把整个画面作为网络的输入(类似于Faster-RCNN),在输出层直接回归BBox的位置和类别。
实现方法
一幅图像被分成SxS个网格单元。如果一个物体的中心落在这个网格里,这个网格负责预测这个物体。
每个网络需要预测B个BBox的位置信息和置信度信息,一个BBox对应四个位置信息和一个置信度信息。置信度表示预测框包含对象的置信度和该框被预测的准确程度的双重信息:
如果网格单元格中有对象,则第一项取1,否则取0。第二项是预测边界框和实际背景之间的IoU值。
每个包围盒要预测(x,y,w,h)和置信度的五个值,每个网格要预测一个类别信息,标记为c类. SxS网格,每个网格要预测b包围盒和c类别。是输出S x S x (5*B C)的张量。(注意:类别信息是针对每个网格的,置信度信息是针对每个边界框的。)以3360为例。在PASCAL VOC中,图像输入是448×448,S=7,B=2。有20个类别(C=20)。输出是7x7x30的张量。整个网络结构如下图所示:
在测试时,由每个网格预测的类别信息乘以由包围盒预测的置信度信息,并且获得每个包围盒的特定类别置信度得分:
等式左边第一项是每个网格预测的类别信息,第二项和第三项是每个包围盒预测的置信度。这个乘积,也就是encode,表示预测的盒子属于某一类的概率,同时也有盒子精度的信息。
得到每个盒子的类别特定置信度得分后,设置阈值,过滤掉得分低的盒子,对保留的盒子进行NMS处理,得到最终的检测结果。损失函数
在实现中,最重要的是如何设计损失函数,使这三个方面得到很好的平衡。作者简单粗暴地采用误差平方和损失来做这件事。
这种方法存在以下问题:
第一,8维的定位误差和20维的分类误差一样重要,这显然是不合理的;其次,如果一个网格中没有物体(一张图中有很多这样的网格),那么这些网格中的盒子的置信度就会被推到0。与带有对象的网格较少相比,这种做法是压倒性的,会导致网络不稳定甚至发散。解决方案:
多关注8维坐标预测,给这些损失更大的损失权重。没有物体的盒子的置信度损失被赋予一个小的损失权重。带有对象的盒子的损失权重和类的损失通常取1。在不同尺寸箱子的预测中,与大箱子的预测相比,小箱子的预测更不能容忍。并且相同的失调损耗在平方和误差损耗中是相同的。
为了缓解这个问题,作者用了一个比较棘手的方法,就是取盒子的宽度和高度的平方根来代替原来的高度和宽度。参考下图就很好理解了。小方框的横轴值较小,发生偏移时反映在比大方框大的Y轴上。(这也是一种近似的方法)
一个网格预测多个盒子,希望每个盒子预测器负责预测一个对象。具体做法是看当前预测箱和地面真相箱哪个IoU更大,负责哪个。这种做法被称为盒预测器的专门化。
最终损失函数如下:
在这个损失函数中:
只有当网格中有对象时,分类错误才会受到惩罚。只有当某个盒子预测器对某个地面真值盒子负责时,该盒子的坐标误差才会受到惩罚,而哪个地面真值盒子负责,取决于它的预测值和地面真值盒子的IoU是否是该单元所有盒子中最大的。其他细节,如使用激活函数使用泄漏RELU,用ImageNet预训练模型等。
劣势
由于输出图层是完全连接的图层,因此YOLO训练模型在检测过程中仅支持与训练图像相同的输入分辨率。虽然每个网格可以预测B个包围盒,但最终只选择IOU最高的包围盒作为物体检测输出,即每个网格最多只能预测一个物体。当图片中的对象比例较小时,例如图像中的兽群或鸟类,每个网格包含多个对象,但只能检测到其中的一个。这是YOLO方法的一个缺陷。在YOLO损失函数中,大物体的IOU误差和小物体的IOU误差在网络训练中对损失的贡献相似(虽然采用了平方根法,但并没有从根本上解决问题)。因此,对于小物体,小的IOU误差也会对网络优化过程产生很大影响,从而降低物体检测的定位精度。
YOLOv2(YOLO9000)提出了一种新的训练方法——联合训练算法,可以将两个数据集混合在一起。用分层的观点对对象进行分类,并且用大量的分类数据集扩展检测数据集,使得两个不同的数据集混合。
联合训练算法的基本思想是:同时在检测数据集和分类数据集上训练物体检测器,利用检测数据集的数据学习物体的准确位置,利用分类数据集的数据增加类别数,提高鲁棒性。
YOLO9000采用联合训练算法进行训练。它有9000类分类信息,从ImageNet分类数据集学习,而物体位置检测从COCO检测数据集学习。
改善
批量标准化
采用批量正则化来优化网络,提高了网络的收敛性,消除了对其他正则化形式的依赖。通过对YOLO的每个卷积层添加批量归一化,地图提高了2%,模型被正则化。使用批量标准化从模型中移除漏失,而不会过度拟合。
高分辨率分类器
目前,行业标准检测方法都需要在ImageNet上预先训练分类器。自Alexnet以来,大多数分类器运行在小于256*256的图像上。现在YOLO从224*224增加到448*448,这意味着网络需要适应新的输入分辨率。
为了适应新的分辨率,YOLO v2的分类网络首先在ImageNet上进行微调,分辨率为448*448。Finetune有10个时期,因此网络有时间调整其滤波器,以便在新的分辨率下运行得更好。还需要优化用于检测的最终网络。最后,通过使用高分辨率,地图提高了4%。
与锚盒卷积
YOLOV1包含全连接层,可以直接预测包围盒的坐标值。更快的R-CNN的方法只使用卷积层和区域建议网络来预测锚盒的偏移值和置信度,而不是直接预测坐标值。作者发现,预测偏移量而不是坐标值可以简化问题,使神经网络更容易学习。
因此,最后YOLO删除了整个连接层,并使用锚盒来预测包围盒。作者在网络中去掉了一个池层,使卷积层的输出具有更高的分辨率。缩小网络使其运行在416*416而不是448*448。因为图片中的所有物体都倾向于出现在图片的中心,尤其是较大的物体,所以在物体的中心有一个单一的位置来预测这些物体。YOLO的卷积层使用值32对图片进行下采样,因此通过选择416*416作为输入大小,最终可以输出13*13的特征地图。使用锚盒会略微降低准确率,但使用它将使YOLO能够预测超过一千个盒子,而召回率将达到88%,mAP将达到69.2%。
维度群
之前锚箱大小是手动选择的,所以还有优化的空间。为了优化,我们在训练集(边界框)上运行k-means聚类以找到更好的值。
如果我们使用欧几里德距离的标准k-means,较大的盒子将比较小的盒子引起更多的误差。因为我们的目的是提高IOU分数,这取决于盒子的大小,使用距离测量:
通过分析实验结果(图2),左图:权衡模型复杂度和高召回率后,选择聚类分类数K=5。右图:是集群的中心,大部分都是又高又瘦的盒子。
表1表明,当使用K-means选择锚盒时,当集群IOU选择值为5时,avgiu的值为61,高于没有集群的方法的60.9。当该值为9时,AVG IOU显著提高。总之说明聚类是有效的。
直接位置预测
使用锚盒的方法会使模型不稳定,尤其是在最初几次迭代中。大部分不稳定因素来自于预测盒子的(x,y)位置。按照以前的YOLO方法,网络不预测偏移量,而是根据YOLO网格单元的位置预测坐标,使得地面真值在0和1之间。为了使网络结果落在这个范围内,网络使用逻辑激活来限制网络预测结果,使得结果在0和1之间。在网络的每个网格单元中预测五个边界框,并且每个边界框具有五个坐标值tx、ty、tw、th、t0。请参见下图(图3)了解它们之间的关系。假设网格单元到图片左上角的偏移量为cx,cy,先前包围盒的宽度和高度为pw,ph,那么预测结果如下图右边的公式所示:
因为限制用于使值参数化,所以它也使网络更容易学习和更稳定。
精细特征
YOLO修改后的特征图尺寸为13*13,足以检测图片中的大物体。同时,使用这种细粒度的特性也可能有利于定位小对象。更快的R-CNN和SSD都使用不同大小的特征图来实现不同的分辨率,而YOLO采用不同的方法。YOLO添加了一个穿透层,以获得先前26*26分辨率层的功能。该穿透层可以将高分辨率特征与低分辨率特征链接起来,链接的方法是将相邻的特征堆叠在不同的通道中。这种方法类似于用Resnet进行身份映射,从而将26*26*512变为13*13*2048。YOLO的检测器位于扩展特征图的上方,因此可以获得细粒度的特征信息,使YOLO的性能提高了1%。
多尺度训练
作者希望YOLO v2可以在不同大小的图片上稳健地运行,因此他使用这一思想来训练模型。
与之前完成图像大小的方法不同,YOLO v2会每隔几次迭代改变网络参数。每10批,网络将随机选择一个新的图片尺寸。由于下采样参数是32,不同的大小也被选择为32的倍数{320,352.608},最小320*320,最大608*608。网络将自动改变大小并继续训练过程。
该策略允许网络在不同的输入大小下达到良好的预测效果,并且同一网络可以在不同的分辨率下进行检测。当输入图像尺寸较小时,运行速度较快,当输入图像尺寸较大时,精度较高,可以权衡YOLO v2的速度和精度。
图4,表voc2007的速度和精度
YOLOV3YOLO v3的模型比之前的模型复杂很多,可以通过改变模型结构的大小来权衡速度和精度。
速度比较如下:
简而言之,YOLOv3的现有检测系统重复使用分类器或定位器来执行检测任务。他们将模型应用于图像的多个位置和尺度。而那些分数高的区域,可以视为测试结果。此外,与其他目标检测方法相比,我们使用完全不同的方法。我们将单个神经网络应用于整个图像。网络将图像分成不同的区域,从而预测每个区域的包围盒和概率。这些边界框将由预测的概率加权。我们的模型比基于分类器的系统有一些优势。它将在测试期间查看整个图像,因此它的预测利用了图像中的全局信息。与R-CNN不同,R-CNN需要单个目标的数千幅图像,它通过单个网络评估进行预测。这让YOLOv3速度非常快。一般比R-CNN快1000倍,比Fast R-CNN快100倍。
改进
多尺度预测(FPN类)是比较好的基本分类网络(ResNet-like)和分类器darknet-53,如下图所示。分类器类别预测。YOLOv3不使用Softmax对每个盒子进行分类。有两个主要考虑因素:
Softmax允许为每个盒子分配一个类别(得分最高的那个)。对于像开放图像这样的数据集,目标可能有重叠的类别标签,因此Softmax不适合多标签分类。Max可以用独立的logistic分类器代替,准确率不会下降。分类损失采用二元交叉熵损失。
多尺度预测
每个尺度预测3个盒子,设计方法盒子,anchor还是用聚类,得到9个聚类中心,按照大小平均分成3个尺度。
Scale 1:在基本网络之后增加一些卷积层,然后输出盒子信息。Scale 2:从scale 1中倒数第二层的卷积层采样(x2),然后添加到最后一个大小为16×16的特征图中,再次多次卷积后输出盒信息。与比例尺1相比,比例尺:是比例尺2的两倍。使用3232的特征地图。参见网络结构定义文件https://github . com/pjreddie/darknet/blob/master/CFG/yolo v3 . CFG。
基本网络Darknet-53
暗网-53
模仿ResNet,精度接近ResNet-101或ResNet-152,但速度更快。对比如下:3360
主干架构的性能比较
检测结构如下:
YOLOv3在mAP@0.5和小目标APs上有不错的成绩,但是随着IOU的增加,性能下降,说明YOLOv3不能很好的匹配ground truth。
边界预测
图2:具有尺寸先验和定位预测的包围盒。我们使用边界框的宽度和高度作为距聚类中心的位移,并使用Sigmoid函数来预测边界框相对于滤波器应用位置的中心坐标。
仍然使用以前的logis,其中cx,cy是网格的坐标偏移量,pw,ph是锚箱的预设边长。最后,边界的坐标值是b*,而网络学习目标是t*,由sigmod函数和指数转换而来。
优势
快速、简单、背景误检率低。通用性强。YOLO也适用于艺术作品中的物体检测。其对非自然图像对象的检测率远高于DPM和RCNN系列检测方法。然而,与RCNN系列物体探测方法相比,YOLO有以下缺点:
识别物体位置的准确性差。召回率低。在每个网格中预测两个框的约束减少了对同一目标的多次检测(R-CNN使用的区域建议方法重叠较多)。相比R-CNN使用选择性搜索产生的2000个提议(RCNN测试中每个都超过40秒),yolo只用了7x7x2。
YOLOV4YOLOv4:物体检测的最佳速度和精确度
论文:https://arxiv.org/abs/2004.10934
代码:https://github.com/AlexeyAB/darknet
YOLOv4!
YOLOv4在COCO上,可以达到43.5% AP,速度高达65 FPS!
YOLOv4的特点是高手,俗称堆砌。但最终能达到这么高的性能,一定是不断尝试,不断叠加,不断调整参数的结果,这一点是笔者所称道的。下面是堆积起来的东西:
加权剩余连接(WRC)跨阶段部分连接(CSP)交叉小批量归一化(CmBN)自对抗训练(SAT)误激活镶嵌数据增强cmbndropblock调节ciou损失本文的主要贡献如下:
1.提出了一种高效的目标检测模型。它使每个人都可以使用1080 Ti或2080 Ti GPU来训练超快速和准确的目标探测器(真棒!)。
2.在检测机培训期间,SOTA的免费赠品袋和特价商品袋方法的效果得到了验证。
3.对方法进行了改进,使其更有效,更适用于单个GPU的训练,包括CBN [89],PAN [49],SAM [85]等。本文将目前主流的目标检测器框架分为输入、主干、颈部和头部。
如下图所示:
对于GPU,作者在卷积层使用:CSPResNeXt50/CSPDarknet53。对于VPU,作者使用了块卷积,但避免使用(SE)块——具体来说,它包括以下模型:efficient net-Lite/mix net/ghost net/mobilenet v3。作者的目标是输入网络分辨率、卷积层数、参数数和层输出(滤波器)数。
总结一下YOLOv4框架:
主干:CSPDarknet53Neck:SPP,PAN head:yolov 3 yolov 4=cspdarknet 53 SPP PAN yolov 3
YOLOv4使用了相当多的技能:
BOF:主干网的切割混合和镶嵌数据增强,DropBlock正则化,Bos的类标签平滑:主干网的Mish激活函数,CSP,BOF的MiWRC:ciou-loss,CmBN,DropBlock正则化,探测器的镶嵌数据增强,自我对抗训练,消除网格敏感性,对单个地面实况使用多个锚,余弦退火调度程序,最佳超参数,BoS的随机训练形状:探测器的Mish激活函数,SPP,SAM,PAN,欧弟-NMS看看YOLOv4的一些组件:
感受YOLOv4实验的充分性(调参数的艺术):
感受一下性能爆炸3360的YOLOv4实验结果
青奥村。更快的R-CNN 1。统一网:YOLO没有展示查找地区建议的过程。虽然在更快的R-CNN中RPN和快速rcnn共用卷积层,但是在模型训练的过程中需要反复训练RPN和快速rcnn。与R-CNN系列中的‘看两眼’(候选框提取和分类)相比,YOLO只需要看一次。
2.YOLO统一为回归问题,而R-CNN将检测结果分为两部分来解决:物体类别(分类问题)和物体位置(包围盒)。
1.参考v1、V2和V3重印地址:
https://blog.csdn.net/App_12062011/article/details/77554288
2.V4重印地址:
https://mp.weixin.qq.com/s/Ua3T-DOuzmLWuXfohEiVFw
暂无讨论,说说你的看法吧