推广 热搜: 账号    程序  魅力  十大  关键词  项目  通过  设备  广告 

YOLO 算法最全综述:从 YOLOv1 到 YOLOv5

   日期:2024-12-12     作者:y71q8    caijiyuan  
核心提示:磐创AI分享转自 | 极市平台作者 | 初识cv文本来源 |https://zhuanlan.zhihu.com/p/136382095【导读】YOLO系列是基于深度学习的



 


 

  磐创AI分享  

转自 | 极市平台

作者 | 初识cv

文本来源 | https://zhuanlan.zhihu.com/p/136382095


【导读】YOLO系列是基于深度学习的回归方法,本文详细介绍了从YOLOv1至最新YOLOv5五种方法的主要思路、改进策略以及优缺点。

等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。

简单的概括就是:

(1) 给个一个输入图像,首先将图像划分成7*7的网格

(2) 对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)

(3) 根据上一步可以预测出7*7*2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可

在实现中,最主要的就是怎么设计损失函数,让这个三个方面得到很好的平衡。作者简单粗暴的全部采用了sum-squared error loss来做这件事。

这种做法存在以下几个问题:

解决办法:

对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。

其他细节,例如使用激活函数使用leak RELU,模型用ImageNet预训练等等

论文地址:https://arxiv.org/abs/1612.08242

YOLOv2相对v1版本,在继续保持处理速度的基础上,从预测更准确(Better)速度更快(Faster)识别对象更多(Stronger)这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测9000种不同对象,称之为YOLO9000

文章提出了一种新的训练方法–联合训练算法,这种算法可以把这两种的数据集混合到一起。使用一种分层的观点对物体进行分类,用巨量的分类数据集数据来扩充检测数据集,从而把两种不同的数据集混合起来。

联合训练算法的基本思路就是:同时在检测数据集和分类数据集上训练物体检测器(Object Detectors ),用检测数据集的数据学习物体的准确位置,用分类数据集的数据来增加分类的类别量、提升健壮性。

Batch Normalization(批量归一化)

mAP提升2.4%。

批归一化有助于解决反向传播过程中的梯度消失和梯度爆炸问题,降低对一些超参数(比如学习率、网络参数的大小范围、激活函数的选择)的敏感性,并且每个batch分别进行归一化的时候,起到了一定的正则化效果(YOLO2不再使用dropout),从而能够获得更好的收敛速度和收敛效果。

通常,一次训练会输入一批样本(batch)进入神经网络。批规一化在神经网络的每一层,在网络(线性变换)输出后和激活函数(非线性变换)之前增加一个批归一化层(BN),BN层进行如下变换:①对该批样本的各特征量(对于中间层来说,就是每一个神经元)分别进行归一化处理,分别使每个特征的数据分布变换为均值0,方差1。从而使得每一批训练样本在每一层都有类似的分布。这一变换不需要引入额外的参数。②对上一步的输出再做一次线性变换,假设上一步的输出为Z,则Z1=γZ + β。这里γ、β是可以训练的参数。增加这一变换是因为上一步骤中强制改变了特征数据的分布,可能影响了原有数据的信息表达能力。增加的线性变换使其有机会恢复其原本的信息。

关于批规一化的更多信息可以参考 Batch Normalization原理与实战。

High resolution classifier(高分辨率图像分类器)

mAP提升了3.7%。

图像分类的训练样本很多,而标注了边框的用于训练对象检测的样本相比而言就比较少了,因为标注边框的人工成本比较高。所以对象检测模型通常都先用图像分类样本训练卷积层,提取图像特征。但这引出的另一个问题是,图像分类样本的分辨率不是很高。所以YOLO v1使用ImageNet的图像分类样本采用 224*224 作为输入,来训练CNN卷积层。然后在训练对象检测时,检测用的图像样本采用更高分辨率的 448*448 的图像作为输入。但这样切换对模型性能有一定影响。

所以YOLO2在采用 224*224 图像进行分类模型预训练后,再采用 448*448 的高分辨率样本对分类模型进行微调(10个epoch),使网络特征逐渐适应 448*448 的分辨率。然后再使用 448*448 的检测样本进行训练,缓解了分辨率突然切换造成的影响。

Convolution with anchor boxes(使用先验框)

召回率大幅提升到88%,同时mAP轻微下降了0.2。

YOLOV1包含有全连接层,从而能直接预测Bounding Boxes的坐标值。Faster R-CNN的方法只用卷积层与Region Proposal Network来预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。作者发现通过预测偏移量而不是坐标值能够简化问题,让神经网络学习起来更容易。

借鉴Faster RCNN的做法,YOLO2也尝试采用先验框(anchor)。在每个grid预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度,这些先验框作为预定义的候选区在神经网络中将检测其中是否存在对象,以及微调边框的位置。

之前YOLO1并没有采用先验框,并且每个grid只预测两个bounding box,整个图像98个。YOLO2如果每个grid采用9个先验框,总共有13*13*9=1521个先验框。所以最终YOLO去掉了全连接层,使用Anchor Boxes来预测 Bounding Boxes。作者去掉了网络中一个Pooling层,这让卷积层的输出能有更高的分辨率。收缩网络让其运行在416*416而不是448*448。

由于图片中的物体都倾向于出现在图片的中心位置,特别是那种比较大的物体,所以有一个单独位于物体中心的位置用于预测这些物体。YOLO的卷积层采用32这个值来下采样图片,所以通过选择416*416用作输入尺寸最终能输出一个13*13的Feature Map。使用Anchor Box会让精确度稍微下降,但用了它能让YOLO能预测出大于一千个框,同时recall达到88%,mAP达到69.2%。

Dimension clusters(聚类提取先验框的尺度信息)

之前Anchor Box的尺寸是手动选择的,所以尺寸还有优化的余地。YOLO2尝试统计出更符合样本中对象尺寸的先验框,这样就可以减少网络微调先验框到实际位置的难度。YOLO2的做法是对训练集中标注的边框进行K-mean聚类分析,以寻找尽可能匹配样本的边框尺寸。

通过分析实验结果(Figure 2),左图:在model复杂性与high recall之间权衡之后,选择聚类分类数K=5。右图:是聚类的中心,大多数是高瘦的Box。

Fine-Grained Features(passthrough层检测细粒度特征)

passthrough层检测细粒度特征使mAP提升1。

对象检测面临的一个问题是图像中对象会有大有小,输入图像经过多层网络提取特征,最后输出的特征图中(比如YOLO2中输入416*416经过卷积网络下采样最后输出是13*13),较小的对象可能特征已经不明显甚至被忽略掉了。为了更好的检测出一些比较小的对象,最后输出的特征图需要保留一些更细节的信息。

另外,根据YOLO2的代码,特征图先用1*1卷积从 26*26*512 降维到 26*26*64,再做1拆4并passthrough。下面图6有更详细的网络输入输出结构。

Multi-ScaleTraining(多尺度图像训练)

作者希望YOLO v2能健壮的运行于不同尺寸的图片之上,所以把这一想法用于训练model中。

区别于之前的补全图片的尺寸的方法,YOLO v2每迭代几次都会改变网络参数。每10个Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352…..608},最小320*320,最大608*608,网络会自动改变尺寸,并继续训练的过程。

这一政策让网络在不同的输入尺寸上都能达到一个很好的预测效果,同一网络能在不同分辨率上进行检测。当输入图片尺寸比较小的时候跑的比较快,输入图片尺寸比较大的时候精度高,所以你可以在YOLO v2的速度和精度上进行权衡。

论文地址:https://pjreddie.com/media/files/papers/YOLOv3.pdf

YOLO v3的模型比之前的模型复杂了不少,可以通过改变模型结构的大小来权衡速度与精度。

改进之处

YOLOv3不使用Softmax对每个框进行分类,主要考虑因素有两个:

分类损失采用binary cross-entropy loss。

每种尺度预测3个box, anchor的设计方式仍然使用聚类,得到9个聚类中心,将其按照大小均分给3个尺度.

参见网络结构定义文件 yolov3.cfg
https://github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg

仍采用之前的logis,其中cx,cy是网格的坐标偏移量,pw,ph是预设的anchor box的边长.最终得到的边框坐标值是b*,而网络学习目标是t*,用sigmod函数、指数转换。

YOLOv4: Optimal Speed and Accuracy of Object Detection

论文:https://arxiv.org/abs/2004.10934

代码:https://github.com/AlexeyAB/darknet

YOLOv4的特点是集大成者,俗称堆料。但最终达到这么高的性能,一定是不断尝试、不断堆料、不断调参的结果,给作者点赞。下面看看堆了哪些料:

本文的主要贡献如下:

1. 提出了一种高效而强大的目标检测模型。它使每个人都可以使用1080 Ti或2080 Ti GPU 训练超快速和准确的目标检测器(牛逼!)。

2. 在检测器训练期间,验证了SOTA的Bag-of Freebies 和Bag-of-Specials方法的影响。

3. 改进了SOTA的方法,使它们更有效,更适合单GPU训练,包括CBN [89],PAN [49],SAM [85]等。文章将目前主流的目标检测器框架进行拆分:input、backbone、neck 和 head.

YOLOv5源代码:

https://github.com/ultralytics/yolov5

因此总结起来,YOLOv5 宣称自己速度非常快,有非常轻量级的模型大小,同时在准确度方面又与 YOLOv4 基准相当。

大家对YOLOV5命名是争议很大,因为YOLOV5相对于YOLOV4来说创新性的地方很少。不过它的性能应该还是有的,现在kaggle上active检测的比赛小麦检测前面的选手大部分用的都是YOLOV5的框架。比赛链接:

https://www.kaggle.com/c/global-wheat-detection

1.V1,V2,V3参考地址:https://blog.csdn.net/App_12062011/article/details/77554288

 

 

扫码看好书,满100减50超值优惠活动等你哦

✄------------------------------------------------

看到这里,说明你喜欢这篇文章,请点击「在看」或顺手「转发」「点赞」。

欢迎微信搜索「panchuangxx」,添加小编磐小小仙微信,每日朋友圈更新一篇高质量推文(无广告),为您提供更多精彩内容。

 

▼  ▼   扫描二维码添加小编  ▼  ▼  

本文地址:http://yejunbin01.xhstdz.com/xwnews/8.html    物流园资讯网 http://yejunbin01.xhstdz.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类生活信息

文章列表
相关文章
最新动态
推荐图文
生活信息
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号