yolo系列整理

版本 作者主页 程序 论文
yoloV1 点击打开 点击打开 点击打开
yoloV2 点击打开 点击打开 点击打开
yoloV3 点击打开 点击打开 点击打开

改进

V2 VS V1:

增加BN层:

  • 解决问题:每层的输入分布一直在改变,训练难度增加;
  • 采取措施:在每层卷积层后,添加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),输入大小:416
    416;输出大小: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,聚类结果可能会偏离;
  • 采取措施:
    1.距离函数:error就和box的尺度无关

    聚类结果:扁长的框较少,而瘦高的框更多
  • 改进效果:使用聚类方法,仅仅5种boxes的召回率就和Faster R-CNN的9种相当

    ##Direct location prediction
  • 模型不稳定,尤其是在早期迭代的时候,大部分的不稳定现象出现在预测box的 (x,y)(x,y) 坐标上;

  • 这个公式的理解为:当预测 tx=1tx=1,就会把box向右边移动一定距离(具体为anchor box的宽度),预测 tx=−1tx=−1,就会把box向左边移动相同的距离。
    符号含义:
    1.x是坐标预测值
    2.xa 是anchor坐标(预设固定值)
    3.x∗是坐标真实值(标注信息)
    4.其他变量 y,w,h 以此类推,t 变量是偏移量;
    这个公式没有任何限制,使得无论在什么位置进行预测,任何anchor boxes可以在图像中任意一点结束。模型随机初始化后,需要花很长一段时间才能稳定预测敏感的物体位置。
  • 采取措施:
    1.采用预测相对于grid cell坐标位置的方法。
    2.13*13的grid,每个cell对应5个anchors box,每个anchors box对应5个值(分别是坐标和置信度),如下所示:

    (cx,cy):这个cell距离图像左上角的cell数;
    (pw,ph):cell对应的anchors box的宽高;
    tx,ty 经sigmod函数处理过,取值限定在了0~1,实际意义就是使anchor只负责周围的box,有利于提升效率和网络收敛。
    e的幂函数是因为前面做了 lnln 计算;
    σ(tx):bounding box的中心相对栅格左上角的横坐标;
    σ(ty):bounding box的中心相对栅格左上角的纵坐标;
    σ(to)是bounding box的confidence score。
  • 改进效果:定位预测值被归一化后,参数就更容易得到学习,模型就更稳定。使用Dimension Clusters和Direct location prediction这两项anchor boxes改进方法,mAP获得了5%的提升。

创新

将目标检测作为回归问题,实现end-to-end训练和检测。
#V3
##改进
多尺度检测 改动基础分类网络和分类器

  1. 添加多尺度预测:将深层特征上采样后,与浅层特征融合,分别形成多个尺度,输出featuremap进行检测,每个尺度对应3中不同大小的anchor,负责预测不同大小的目标。
    尺度1:在基础特征网络后添加几层卷积层后,再输出box信息,负责预测较大目标
    尺度2:从尺度1网络的倒数第二层2倍上采样后与最后一个1616大小的featuremap相加,再通过几层卷积层后,输出box,相比尺度1变大size变大两倍,负责预测中等大小的目标。
    尺度3:与尺度2类似,使用32
    32大小的featuremap作为输出,负责预测较小目标。

对比

1.与RCNN和Fast RCNN对比:yolo没有求取proposal region,而RCNN系列需要通过selective research提取候选框,导致训练过程分为多个阶段完成。
与Faster RCNN对比:尽管用RPN 网络代替selective research,将RPN集成到Fast RCNN中,形成了一个统一的网络,实现卷积层参数的共享。但是在训练过程中还是需要反复训练RPN和Fast RCNN网络。
因此RCNN系列的检测,都属于two-stage策略。
2.YOLO通过一次inference,同时得出目标位置和分类scores,而RCNN系列将目标检测任务分成:检测和回归。
#基础网络
仿ResNet, 与ResNet-101或ResNet-152准确率接近,但速度更快.


##边框预测
仍采用之前的logistic方式:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ b_x &= σ(t_x)+…
其中:
c x , c y c_x,c_y cx​,cy​:网格坐标(以grid为单位);
p w , p h p_w,p_h pw​,ph​:anchor box尺寸;
##优缺点
相比RCNN,YOLO的缺点如下:

  1. 精确性差,由于目标的位置信息通过回归求出,没有进行微调;
  2. 召回率低,在每个网格中预测固定数量的bbox这种约束方式减少了候选框的数量。
    ##YOLO 和FAster R-CNN区别
  3. 统一网络:YOLO没有显示求取region proposal的过程。Faster R-CNN中尽管RPN与fast rcnn共享卷积层,但是在模型训练过程中,需要反复训练RPN网络和fast rcnn网络.
    相对于R-CNN系列的"看两眼"(候选框提取与分类,图示如下),YOLO只需要Look Once.
  4. YOLO统一为一个回归问题:而R-CNN将检测结果分为两部分求解:物体类别(分类问题),物体位置即bounding box(回归问题)。

网络结构


YOLO网络借鉴了GoogLeNet分类网络结构。不同的是,YOLO未使用inception module,而是使用1x1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)+3x3卷积层简单替代。
作者还给出一个更轻快的检测网络fast YOLO,它只有9个卷积层和2个全连接层。使用titan x GPU,fast YOLO可以达到155fps的检测速度,但是mAP值也从YOLO的63.4%降到了52.7%,但却仍然远高于以往的实时物体检测方法(DPM)的mAP值。
网络最后一层,直接通过reshape将一维的vector调整到7730的结构。丢失了空间信息。

检测思路

**思路:**以end-to-end的方式,进行训练和预测,使用整幅图像的特征,预测所有类上的所有boxes。将一幅图像分成S*S的格子,如果目标中心落到某个grid中,该grid就负责检测该object。
**box相关参数:**那每个grid负责预测B个box以及这B个box的confidence scores,每个box对应的confidence score说明该box包含目标的可能性以及与GT box的接近程度,通过下式定义:

对于每个box: x , y , w , h , c o n f i d e c e x,y,w,h,confidece x,y,w,h,confidece
其中: ( x , y ) (x,y) (x,y):box中心坐标相对于grid cell的边界位置,范围是0~1;
( w , h ) (w,h) (w,h):box的宽和高相对于整幅图像大小,范围是0~1;
( c o n f i d e c e ) (confidece) (confidece):见上述公式;

**class相关参数:**每个grid对应C个条件概率: P r ( C l a s s i ∣ O b j e c t ) Pr(Classi|Object) Pr(Classi∣Object),也就是如果box包含物体,那么box中物体属于某类的概率(注意这里不是01编码)。该后验概率仅反映出IoU最大的box所包含物体的类概率。

注意:
conditional class probability信息是针对每个网格的。
confidence信息是针对每个bounding box的。

test指标:既包含了bounding box中预测的class的 probability信息,也反映了bounding box是否含有Object和bounding box坐标的准确度。

下图说明了这两方面的评估,以及最终的综合评估:

得到30维向量后,通过上述公式,将向量整合成20*1维的向量,如下图所示:

每个grid按照上面的规则,整合后的向量如下:

将小于阈值的结果进行抑制:

非极大值抑制:

输出检测结果:

训练思路(loss函数)


网络训练和检测思路不同。
仅仅通过最小均方误差来定义loss函数,存在不足,需要通过以下规则进行修改:

  1. 不同指标之间权衡关系:8维的localization error和20维的classification error同等重要显然是不合理的。
    解决办法:更重视8维的坐标预测,给这些损失前面赋予更大的loss weight, 记为 λcoord ,在pascal VOC训练中取5。(上图蓝色框)
  2. 大部分grids不含物体:那么就会将这些栅格中的bounding box的confidence 置为0,相比于较少的有object的栅格,这些不包含物体的栅格对梯度更新的贡献会远大于包含物体的栅格对梯度更新的贡献,这会导致网络不稳定甚至发散。
    解决办法:如上述红色框和黄色框,通过调整 λ n o o b j λnoobj λnoobj实现两者之间对梯度平衡作用。
    3.含有object的bbox的confidence loss (上图红色框) 和类别的loss (上图紫色框)的loss weight正常取1。
    4.**不同大小box对IoU影响:**对不同大小的bbox,相同的偏离,大bbox对IOU的影响若于小box。通过sum-square error loss对该问题进行缓和。
    调整的目标:相同的偏离,增强对小bbox的IOU的影响,减弱打的bbox的IOU的影响。为了缓和这个问题,作者用了一个巧妙的办法,就是将box的width和height取平方根代替原本的height和width。 如下图:small bbox的横轴值较小,发生偏移时,反应到y轴上的loss(下图绿色)比big box(下图红色)要大。
    如下图所示:

每个grid有多个boxes,最终的结果,采用IoU最大的box predictor预测,因此,不同box之间存在竞争,因此,随着训练轮数的增加,特定box predictor越来越好的,负责预测不同尺寸的物体。

#参考网址
YOLO详解
图解YOLO
YOLOv1论文理解
目标检测网络之 YOLOv3
darknet+win+linux接口
yolov3论文解析

YOLO系列(V1-V2-V3)相关推荐

  1. 论文记录1_YOLO系列(v1 v2 v3 v4)

    注:此文为阅读笔记,参考了很多论文,博客,如有侵权请联系,我附上原出处. 文章目录 准备知识: YOLO V1 创新点 grid cell 置信度 例子 网络架构 Backbone Neck Head ...

  2. YOLO系列之v2/v3

    目录 1.序言 2.yolov2的贡献点 3.yolov2框的回归方式 4.总结 1.序言 Yolov1的框回归较为困难,依然存在很多缺点,在此基础上提出了Yolov2,以下对yolov2进行简单介绍 ...

  3. PyTorch 实现经典模型7:YOLO (v1, v2, v3, v4)

    YOLO (v1, v2, v3, v4) 网络结构 YOLO v3 网络结构 代码 Ref <机器爱学习>YOLO v1深入理解 <机器爱学习>YOLOv2 / YOLO90 ...

  4. 经典卷积神经系列(Inception v1\v2\v3\v4、ResNet、ResNext、DenseNet、SENet)

    写在前面:此文只记录了下本人感觉需要注意的地方,不全且不一定准确.详细内容可以参考文中帖的链接,比较好!!! 经典的CNN:Inception v1\v2\v3\v4.Resnet.Resnext.D ...

  5. IGMP V1 V2 V3 定义和区别

    先来认识一下IGMP这个协议吧,它的全称是Internet Group Management Protocol,它和unicast和multicast的区别是它是发往一组计算机(属于它这个组播组的所有 ...

  6. 使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow)

    使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow) [尊重原创,转载请注明出处]https://blog.csdn.net/guyueali ...

  7. (转自网易--无风)IGMP V1 V2 V3 定义和区别

    IGMP的问题,应用在IGMP的一些概念. 那就让我们完整的看一下这个组播协议把,以下是我学习过程重总结的一些东西, 先来认识一下IGMP这个协议吧,它的全称是Internet Group Manag ...

  8. DeepLab系列(v1,v2,v3,v3+)总结

    U-net: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation 语义分割面临的挑战 1. DeepLab ...

  9. 目标检测(九)--YOLO v1,v2,v3

    YOLO v1 这是继RCNN,fast-RCNN和faster-RCNN之后,rbg(RossGirshick)针对DL目标检测速度问题提出的另外一种框架.YOLO V1其增强版本GPU中能跑45f ...

  10. CNN:RCNN、SPPNet、Fast RCNN、Faster RCNN、YOLO V1 V2 V3、SSD、FCN、SegNet、U-Net、DeepLab V1 V2 V3、Mask RCNN

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) CNN: 目标检测: RCNN SPPNet Fast RCN ...

最新文章

  1. php post请求后端拿不到值_[精选] uniapp实现多端开发,与PHP是如何结合的
  2. 数据结构解析——小白也能看懂的单链表
  3. 音视频技术开发周刊 61期
  4. 服务提供者和服务消费者
  5. 网页中如何使用一些特殊字体
  6. java彩票案例_java彩票例子
  7. 11篇SCI论文,多次跨专业,武大物理博士敲开美国顶尖生命医学研究中心大门...
  8. leetcode 76 python
  9. android html拦截广告,广告见鬼去!两招让安卓告别网页广告
  10. leveldb - sstable格式
  11. matlab复数向极坐标转换_Matlab 图像转极坐标系
  12. QList、QVector、QMap容器类
  13. python的property用法_Python的@property使用方法详解
  14. php查询mysql表里的数据_PHP连接Mysql数据库读取表格数据
  15. 一片文章带你理解再生核希尔伯特空间(RKHS)以及各种空间
  16. 工作流(Workflow)基本介绍
  17. 分析日志的工具: 日志易
  18. 电脑键盘按键都代表着什么意思?
  19. R语言——数据格式和数据读取
  20. Bootstrap(包括scss)复习

热门文章

  1. 微巨科技:公众号迁移公证流程及注意事项
  2. Ztree之初涉——简单Ztree的实现
  3. 推荐一些python IDE(python编辑器)
  4. C小程PTA错题集1
  5. ps 2022 保存打开文件闪退解决方法
  6. 普元 AppServer 6.5 将springboot应用部署到应用服务器,上传文件时报错:Caused by: org.springframework.web.multipart.Multipar
  7. Android Fastboot 模式下刷机教程
  8. 【芯片应用】DAC8554
  9. CornerStone 遇到的问题及解决方法
  10. 通过字体名获取字体文件