【AI】YOLO学习笔记二
上一篇写了YOLO V1和YOLO V2的主要思想,接下来继续YOLO系列。
1.YOLO V3
YOLO V3特点:
1.1 网络结构的变化
YOLO V3 最大的改进就是网络结构的改进,使其更加适合小目标检测
- 去掉池化和全连接层,全部采用卷积的形式
- 下采样通过stride为2的卷积来实现
- 总共有三层的输出层,分别是13/26/52特征图的输出,兼顾大小目标的检测
- 浅层次的结果与深层次的结果融合,融合后作为输出结构
1.2先验框更加丰富
YOLO V2的先验框只有3种,适合检测长的、宽的、正方形的物体,YOLO V3在新增了3种尺度的输出结果上都添加了3先验框,共计9种先验框
1.3softmax改进,预测多标签任务
1.4残差连接
简单理解就是对比之前的结果和后续的结果,如果后续权重有提高就使用后续处理,没有提升就用之前结果。借用了resnet思想
2.YOLO V4
YOLO V4可以使用单GPU训练,通过两大核心方法从数据层面和网络设计层面来进行改进,此外还进行了消融实验。
2.1 Bag of freebies(BOF)
我们可以将BoF视为一个数据增强的pipeline,数据增强的目的是增加训练图像的多样性,以使模型对从不同环境获得的图像具有更强的鲁棒性。通常,光度失真和几何失真是两种最常用的数据增强方法。对于光度失真,可以调整图像的亮度,色度,对比度,饱和度,以及加入噪点;对于几何失真,可以对图像进行随机缩放,裁剪,翻转,旋转等。此外,还有一种数据增强方法是模拟遮挡,即用一个物体覆盖另一个物体的一部分。
BoF仅作用于模型的训练阶段,只对模型的最终学习到的参数有影响,并不会修改网络结构,所以在推理时不会带来额外的计算开销。
2.1.1数据增强:调整亮度、对比度、色调、随机缩放、剪切、翻转、旋转
- Mosaic data augmentation
包括mixup、cutout、cutmix - Random Erase
用随机值或训练集的平均像素值替换图像的区域 - Hide and Seek
根据概率设置随机隐藏一些补丁 - Self-adversarial-training(SAT)
通过引入噪音点来增加游戏难度
2.1.2网络正则化方法:Dropout、Dropblock等
-
Dropout
局限性:可以通过周围像素点推测出点的信息,困难度不 -
DropBlock
之前的dropout是随机选择点(b),现在吃掉一个区域,增加困难度,提高泛化能力,减少过拟合 -
Label Smoothing
例如:原来标签为(0,1),修改后变成(0.05,0.95)
使用之后效果分析:簇内更紧密,簇间更分离
2.1.3类别不平衡,损失函数设计
- IOU损失
最简单的损失函数公式:1-IOU
局限性
相同的iou无法区别不同的情况
没有相交则IOU=0无法梯度计算,相同的IOU却反映不出实际情况到底咋样 - GIOU损失
引入了最小封闭形状C(C可以把A,B包含在内)
在不重叠情况下能让预测框尽可能朝着真实框前进
局限性
重叠的时候损失结果不能区分各种情况 - DIOU损失
其中分子计算预测框与真实框的中心点欧式距离d
分母是能覆盖预测框与真实框的最小BOX的对角线长度c
直接优化距离,速度更快,并解决GIOU问题 - CIOU损失(V4应用)
损失函数必须考虑三个几何因素:重叠面积,中心点距离,长宽比 - DIOU-NMS
- SOFT-NMS
2.2Bag of specials(BOS)
Bag of specials,顾名思义,就是“一堆特价包”的意思,在作者看来,就是一些通过增加推理成本,改变网络结构,来提高目标检测精度的方法。
- SPPNet(Spatial Pyramid Pooling)
SPP其实就是用最大池化来满足最终输入特征一致即可
SPPNet称为空间金字塔池化网络,其思路其实很简单,就是为了让网络能够适应不同尺度的图像输入,避免对图片进行裁剪或者缩放,导致位置信息丢失。
由于卷积层在面对不同尺度的输入图像时,会生成大小不一样的特征图,会对网络的训练带来较大的麻烦,因而SPPNet就通过将卷积层最后一层的池化层替换为金字塔池化层,固定输入的特征向量的大小。 - CSPNet(Cross Stage Partial Network)
每一个block按照特征图的channel维度拆分成两部分,一份正常走网络,另一份直接concat到这个block的输出
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!