概述

yolo3的论文写的跟个小作文一样,也不知道怎么过的审,里面实质性的东西并不多,做的实验一部分是引用Facebook AI Research的《Focal Loss for Dense Object Detection》,虽然最后没有用Focal Loss,但还是cite了人家一个大图;v3较v2提升明显的是对小物体的识别精度,但这也不是Joseph Redmon的原创,引用的还是Facebook AI Research的《Feature Pyramid Networks for Object Detection》特征金字塔FPN,网络结构借鉴了Microsoft Research Kaiming He他们的《Deep Residual Learning for Image Recognition》残差网络。
所以这么看的话,Joseph Redmon本人对yolo3的创新贡献值并不高,再加上yolo4已经不是Joseph Redmon和Ali Farhadi导师的成果,变成了Institute of Information Science
Academia Sinica, Taiwan(台湾中央研究院信息科学研究所)的成果,那么对于yolo系列来说,v2就已经是一个最强转折点了。

所以在看v3的主干网络之前,需要先了解一下何学霸的residual network和FPN。

同样强调一下,画图和公式推导不易,请勿盗图,转载请注出处。

一、残差网络residual network

残差网络的结构很简单,但原理涉及到深度学习基本理论,觉得晦涩的同学可以只看结构。

1. 残差网络提出的背景(残差网络要解决的问题)

(1)梯度消失/爆炸
梯度消失和梯度爆炸在本质上一样的,在神经网络反向传播更新权重时,由于网络层数太深导致链式求导连乘的因子项太多,而一类激活函数(如sigmoid)导数最大值为0.25,有这类激活函数参与乘积后,使得最后要更新的梯度逐渐消失。 如果只把激活函数换成RELU,是不是就能无条件地解决掉这个问题?很明显不是,要不然残差网络就没有意义。
(2)网络退化,随着网络越深,精度达到饱和后迅速衰减。这个也与梯度变化有关,具体可见下面解析。

2. 残差网络是怎么做的



正常参数流动是从上到下每层都跑不掉,残差网络用了一个shortcut来为不相邻的网络层之间开辟了一条高速路,也就是说,原先网络输出结果是F(x),现在的输出要再加上之前的输入x。

3. 残差网络为什么可以解决它要解决的问题

我们都熟悉神经网络的BP算法,mlp(多层感知机)全连接网络,是深度神经网络基础中的基础。mlp网络结构如下图:

实际的数据流动过程如下,
(1)前向传播过程:

(2)反向传播过程

如上图,以w11和w21两个需要学习的参数为例,假设我要更新w11和w21两个权重,先看这两个权重对最后误差的影响。


由上式得出的最后结果可知,当激活函数使用relu后,不论网络有多深,梯度始终很均匀,那relu就能解决梯度消失的问题,残差网络这不是多此一举吗,
那是因为忽略了一个问题,随着网络越深,权重越多,反向传播在更新上面参数时加权下面参数的数量也会越来越多,当网络层数少,这种互相关联的因素并不会影响模型的精度,但为了使网络能获取更多的细粒度特征,理解更丰富的语义,加深网络层数显然是最优选择,这时候,参数之间互相关联的因素就会迅速影响模型的精度,导致整体梯度减小,直至消失。

那何恺明他们用的办法就是shortcut,我叫它“抄近道”,这种方式使得当数据流动时,除了正常前向传播外,相当于从起点修了条高速路直达目的地,由于没有经过中间商赚差价,使得反向传播更新上面参数时受到下面参数的影响就很小但不是没有,这样既兼顾了下层神经元学习到的有效参数,又能保证不会随着网络加深而导致模型退化。

二、特征金字塔

《Feature Pyramid Networks for Object Detection》是17年的论文,解决的问题就是所有目标检测算法的短板——识别小尺度目标精度低的问题。针对这一问题,当前流行的检测算法有不同的解决方式,例如之前在SSD的算法解析里提到过,SSD通过从卷积层抽取6层feature map来模拟不同尺度,高层特征图识别近而大的目标,低层特征图负责识别远而小的目标,最低层为conv4_3,那么实验表明,SSD对小尺度目标的检测仍然不够好,何认为conv4_3选得还是靠后;还有YOLO2解决多尺度的方法就是之前提到的passthrough层。至于yolo1压根就没有解决这个问题,只是和大多数分类算法一样在最后一层的featuremap上做类别预测和位置回归。Faster-rcnn也是只对最后一层featuremap做RPN。下面看FPN是怎么更好得解决这一难点的。

如上图所示,由原图经若干层卷积之后,得到三层featuremap,分别为256x256xchannel1,64x64 x channel2,16x16x channel3,越往后的特征图语义越强,但位置信息越粗略。16x16x channel3的特征图经过1x1x channel的卷积核运算,变成16x16x channel,然后对其上采样,变成64x64 x channel的张量,再将此张量与原来的64x64 x channel的所有通道对应位置相加,变成新的64x64 x channel的张量,再继续上采样,对应位置相加,一直重构到前向传播的第二层卷积。这就是FPN的全过程。这里的对应位置相加是累加,相加之后的通道数没变,而yolo2的passthrough层之后做的融合是通道数叠加,相同尺寸下的通道数增加。

三、网络结构 darknet-53

了解了残差网络与FPN,下面看yolo3的网络结构就相当简单了。


网络结构如上图,依然是卷积层提取特征,总共有52层卷积,包含五个残差块,分别取第三、四、五残差块的输出用于构建FPN,这里的FPN操作与原始的FPN不同,依然采用yolo2的通道融合方式,即相同尺寸特征图的通道叠加。

yolo3的类别预测和位置回归与yolo2基本相同,只不过将k-means聚的类由原来的5类增加到了9类,即锚点框的尺寸变成了9种。具体解释可参照yolo2解析。

四、总结

对于yolo系列,yolo3基本已经结束,通过引入了残差网络和FPN极大程度地优化了yolo2,使精度和帧率都有很强的表现性。之后的博客主线我会集中到19年,20年的优秀论文,至于yolo4和yolo5,我会评估一下他们的具体价值再决定更不更新。之后会慢慢引入NLP中的基础网络结构,如RNN,LSTM,知识蒸馏,基于弱标签样本的训练方法等领域的相关算法。

YOLO3+残差网络+FPN详解相关推荐

  1. 残差网络resnet详解

    1 产生背景 网络的深度对于特征提取具有至关重要的作用,实验证得,如果简单的增加网络深度,会引起退化问题[Degradation问题],即准确率先上升然后达到饱和,再持续增加深度会导致准确率下降.该实 ...

  2. ResNet(残差网络)详解

    ResNet在<Deep Residual Learning for Image Recognition>论文中提出,是在CVPR 2016发表的一种影响深远的网络模型,由何凯明大神团队提 ...

  3. Resnet50残差网络代码详解

    Resnet50是Resnet残差网络系列的代表网络,由Kaiming于2016年发表于CVPR 论文地址:CVPR 2016 Open Access Repository 参考代码:https:// ...

  4. 睿智的目标检测8——yolo3的loss组成详解

    睿智的目标检测8--yolo3的loss组成详解 学习前言 参考源码 计算loss所需参数 1.y_pre 2.y_true loss的计算过程 学习前言 只会预测是不够的,对于只有会了训练才能训练出 ...

  5. Docker(十四):Docker:网络模式详解

    Docker作为目前最火的轻量级容器技术,牛逼的功能,如Docker的镜像管理,不足的地方网络方面. Docker自身的4种网络工作方式,和一些自定义网络模式 安装Docker时,它会自动创建三个网络 ...

  6. 用netstat查看网络状态详解

    --用netstat查看网络状态详解 -----------------------------2014/06/11 一.Linux服务器上11种网络连接状态:                     ...

  7. ARP命令详解--网络命令详解二

    显示和修改"地址解析协议 (ARP)"缓存中的项目.ARP 缓存中包含一个或多个表,它们用于存储 IP 地址及其经过解析的以太网或令牌环物理地址.计算机上安装的每一个以太网或令牌环 ...

  8. nbns协议_网络协议详解1 - NBNS

    NetBIOS 简介 NetBIOS,Network Basic Input/Output System的缩写,一般指用于局域网通信的一套API,相关RFC文档包括 RFC 1001, RFC 100 ...

  9. 【Tools】VMware虚拟机三种网络模式详解和操作

    00. 目录 文章目录 00. 目录 01. VMware虚拟机三种网络模式 02. Bridged(桥接模式) 03. NAT(地址转换模式) 04. Host-Only(仅主机模式) 05. 参考 ...

最新文章

  1. 为什么我不再推荐使用 MVC 框架?
  2. Java单例模式(Singleton)的五种实现
  3. 电脑已经连上网却显示没网图标小地球,导致国际游戏暴雪等软件无法运行(已解决)
  4. [NewLife.XCode]数据模型文件
  5. Windows虚拟地址转物理地址(原理+源码实现,附简单小工具)
  6. 漫步数理统计二十——多元随机变量
  7. 互联网名词解释(通用、运营、广告、APP推广、移动推广、APP运营、商务模式、职位、客户管理)
  8. Vue 2.0的建议学习顺序(尤雨溪)
  9. 以下是一段歌词,请从这段歌词中统计出朋友出现的次数
  10. 底部点击加载更多功能的简单实现
  11. 【遇见Doris】Apache Doris在一点资讯自媒体平台的应用
  12. 圆角矩形 shader
  13. Linux也有全功能杀毒软件啦!
  14. 一文了解Web Worker
  15. 知心王姐小饭桌 IM消息应用开发:一看看懂Protocol Buffer(协议篇)
  16. win10字体设置修改方法【乡巴佬】
  17. c语言写层次分析法,基于C语言的层次分析法在医院工作质量评价中的设计与实现...
  18. 2020张宇1000题【好题收集】【第一章:极限、连续】
  19. 简单视频播放AVPlayer和AVPlayerViewController
  20. iOS 字体适配(转)

热门文章

  1. 计算机数据库方向论文ei,数据库实验室1篇论文被《计算机研究与发展》EI期刊录用...
  2. 【DCDC转换器】BUCK电路的演进
  3. 自动控制理论(7)——线性系统的稳态误差分析
  4. 浙江大华后端开发一面面经
  5. QT 完整项目框架 功能总览
  6. 利用浮动实现酷狗音乐主页布局2
  7. python编程 | pdf转excel的python方法
  8. 三台主机关于ntp时间同步的实验
  9. 定积分以及变积分上限函数(附代码)
  10. 信号处理与数据分析——Z变换