yolo 总结一

https://blog.youkuaiyun.com/zfq740695564/article/details/79754578

https://zhuanlan.zhihu.com/p/35325884

yolov1:

YOLO网络的设计比较简单,借鉴GoogLeNet模型,作者将一个完整的网络框架分为两个部分:24个卷积层用于抽取图像特征,两个全连接层用于分类和定位。有一点小的改进,YOLO网络没有使用inception modules,而是用1x1卷积层+3x3卷积层简单代替。上面也提到了网络的最终输出为7*7*30。

YOLO v1全部使用了均方差(mean squared error)作为损失(loss)函数。由三部分组成:坐标误差、IOU误差和分类误差。

  • 物体检测的精度并不是最优,容易产生定位错误。 
  • 因为一个grid cell只能预测2个物体,因此对小物体的检测效果不好。

 

 

yolov2:  将目标检测作为回归问题,实现end-to-end训练和检测。

##batch normalization

  • 解决问题:每层的输入分布一直在改变,训练难度增加;
  • 采取措施:在每层卷积层后,添加batch normalization
  • 改进效果:
    1.mAP获得了2%的提升;
    2.规范化模型,可以在舍弃dropout优化后依然不会过拟合;

##High Resolution Classifier

  • 解决问题:由于现有的特征提取网络局限,导致图片被resize到不足256 * 256,导致分辨率不够高,给检测带来困难;
    采取措施:
    1.提高分辨力到448 * 448;
    2.改变原来特征网络的输入分辨率,在ImageNet数据集上对分类网络进行fine tune训练10轮(10 epochs),使得网络适应高分辨率的输入;然后,对检测网络进行fine tune。
    改进效果:mAP获得了4%的提升
      

##Convolutional With Anchor Boxes

  • 解决问题:全连接层的数据完成边框的预测,导致丢失较多的空间信息,定位不准;
    采取措施:
    1.借鉴了Faster R-CNN中的anchor思想
    2.在卷积特征图上进行滑窗操作,每一个中心可以预测9种不同大小的建议框。
    3.去掉了后面的一个池化层以确保输出的卷积特征图有更高的分辨率;
    4.缩减网络,输入分辨力为416416,使得输出的feature map宽高为基数,产生一个center cell(大物体通常占据了图像的中间位置),用一个中心cell预测大物体,否则就要用中间的4个cell来进行预测,有利于提高效率。
    5.卷积层降采样(factor为32),输入大小:416416;输出大小:13*13改进效果:召回率上升,准确率下降。
    1.改进后:预测13 * 13 * 9 = 1521个boxes,recall为88%,mAP为69.2%
    2.改进前:预测7 * 7 * 2 = 98个boxes,recall为81%,mAP为69.5%
    3.准确率只有小幅度的下降,而召回率则提升了7%。
     

###Dimension Clusters

  • 解决问题:
    1.anchor boxes的宽高维度往往是精选的先验框,如果一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就更容易学到准确的预测位置;
    2.传统的K-means聚类方法使用的是欧氏距离函数,也就意味着较大的boxes会比较小的boxes产生更多的error,聚类结果可能会偏离;
    采取措施:在Faster R-CNN和SSD中,先验框的维度(长和宽)都是手动设定的,带有一定的主观性。如果选取的先验框维度比较合适,那么模型更容易学习,从而做出更好的预测。因此,YOLOv2采用k-means聚类方法对训练集中的边界框做了聚类分析。综合考虑模型复杂度和召回率,作者最终选取5个聚类中心作为先验框,
    距离函数:error就和box的尺度无关
    3.改进效果:使用聚类方法,仅仅5种boxes的召回率就和Faster R-CNN的9种相当

###New Network: Darknet-19

  • 大多数目标检测的框架是建立在VGG-16上的,YOLO2是依赖于DarkNet-19的结构(新的基础模型(特征提取器).

###Direct location prediction

  •  

###Fine-Grained Features

  • YOLOv2提出了一种passthrough层来利用更精细的特征图。YOLOv2所利用的Fine-Grained Features是 26\times26 大小的特征图(最后一个maxpooling层的输入)。passthrough层抽取前面层的每个 2\times2 的局部区域,然后将其转化为channel维度,对于 26\times26\times512 的特征图,经passthrough层处理之后就变成了 13\times13\times2048 的新特征图。

###Multi-Scale Training

  • 由于YOLOv2模型中只有卷积层和池化层(与yolov1不同,去掉了全连接),所以YOLOv2的输入可以不限于 416\times416 大小的图片。为了增强模型的鲁棒性,YOLOv2采用了多尺度输入训练策略,具体来说就是在训练过程中每间隔一定的iterations之后改变模型的输入图片大小。由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值: \{320, 352,..., 608\} ,输入图片最小为 320\times320 ,此时对应的特征图大小为 10\times10 (不是奇数了,确实有点尴尬),而输入图片最大为 608\times608,对应的特征图大小为 19\times19 。在训练过程,每隔10个iterations随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练

  • 在训练检测时,作者把分类网络改成检测网络,去掉原先网络的最后一个卷积层,取而代之的是使用3个3×3x1024的卷积层,并且每个新增的卷积层后面接1×1的卷积层,数量是我们要检测的类的数量。

yolov3:

改进之处:

1.多尺度预测 (类FPN,采用多个尺度融合的方式做预测。原来的YOLO v2有一个层叫:passthrough layer)

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

将深层特征上采样后,与浅层特征融合,分别形成多个尺度,输出featuremap进行检测,每个尺度对应3中不同大小的anchor,负责预测不同大小的目标。

尺度1:在基础特征网络后添加几层卷积层后,再输出box信息,负责预测较大目标
尺度2:从尺度1网络的倒数第二层2倍上采样后与最后一个1616大小的featuremap相加,再通过几层卷积层后,输出box,相比尺度1变大size变大两倍,负责预测中等大小的目标。
尺度3:与尺度2类似,使用3232大小的featuremap作为输出,负责预测较小目标。

è¿éåå¾çæè¿°

2.更好的基础分类网络(类ResNet)和分类器 darknet-53。

3.对象分类softmax改成logistic。预测对象类别时不使用softmax,改成使用logistic的输出进行预测。这样能够支持多标签对象(比如一个人有Woman 和 Person两个标签)。

4.我们看一下YOLO3共进行了多少个预测。对于一个416*416的输入图像,在每个尺度的特征图的每个网格设置3个先验框,总共有 13*13*3 + 26*26*3 + 52*52*3 = 10647 个预测。每一个预测是一个(4+1+80)=85维向量,这个85维向量包含边框坐标(4个数值),边框置信度(1个数值),对象类别的概率(对于COCO数据集,有80种对象)。

对比一下,YOLO2采用13*13*5 = 845个预测,YOLO3的尝试预测边框数量增加了10多倍,而且是在不同分辨率上进行,所以mAP以及对小物体的检测效果有一定的提升。

 

 

 

 

 

### YOLO系列算法改进点与总结 #### YOLOv3 到 YOLOv4 的改进点 YOLOv4 是在 YOLOv3 基础上的重要升级版本,不仅引入了许多创新技术,还借鉴了其他论文中的优秀技巧 (tricks),从而提升了模型性能。以下是具体改进点: 1. **Backbone 升级**: YOLOv3 使用 Darknet-53 作为骨干网络,而 YOLOv4 引入了 CSPDarknet-53[^2]。这种架构通过将特征映射划分为两个部分并利用跨阶段层次结构进行合并,有效降低了计算复杂度,同时保持甚至提高了准确性。 2. **Bag of Free Tricks**: YOLOv4 应用了多种无需额外计算成本的技术来提升性能,例如: - Mish 激活函数替代 Leaky ReLU[^1]。 - DropBlock 正则化方法减少过拟合。 3. **Bag of Special Tricks**: 这些技巧虽然会增加定的计算开销,但能显著提高精度,包括: - 自适应锚框机制优化检测框预测。 - CIoU Loss 替代传统的 IoU 或 GIoU 损失函数,加速收敛过程。 - SAM 和 PANet 结构增强多尺度特征融合能力。 #### YOLOv4 到 YOLOv5 的改进点 相比 YOLOv4,YOLOv5 更加注重工程实现和实际应用效果,主要体现在以下几个方面: 1. **模块化设计**: YOLOv5 将整个框架拆解成多个独立组件,便于开发者快速调整参数或替换子模块以适配特定场景需求。 2. **自动化工具链支持**: 提供了套完整的训练、验证及部署流程脚本,极大简化了使用者的操作难度。 3. **高效数据预处理策略**: 集成了 Mosaic 数据增强方式以及自定义输入尺寸调节功能,有助于改善小物体识别能力和泛化性能。 4. **轻量化探索**: 推出了不同规模的变体(如 S/M/L/X),满足嵌入式设备到高性能服务器之间的多样化硬件资源约束条件下的实时推理需求。 #### 总结与分析 通过对上述三个版本演进路径的研究可以看出,从 YOLOv3 开始逐步向更高效的特征提取方向迈进;至 YOLOv4,则更多依赖于现有研究成果积累并通过组合各种先进 trick 达到最佳平衡状态;最后发展到 YOLOv5,更加侧重易用性和灵活性方面的考量[^3]。 尽管如此,仍需注意每代产品都有各自适用范围及其局限性所在——比如当面对极端分辨率变化或者极度稀疏分布的目标类别时可能表现不佳等问题待解决。 ```python # 示例代码展示Mish激活函数实现 import torch import torch.nn as nn class Mish(nn.Module): def __init__(self): super(Mish, self).__init__() def forward(self, x): return x * (torch.tanh(torch.nn.functional.softplus(x))) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值