赞
踩
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。
同样强调一下,画图和公式推导不易,请勿盗图,转载请注出处。
残差网络的结构很简单,但原理涉及到深度学习基本理论,觉得晦涩的同学可以只看结构。
(1)梯度消失/爆炸
梯度消失和梯度爆炸在本质上一样的,在神经网络反向传播更新权重时,由于网络层数太深导致链式求导连乘的因子项太多,而一类激活函数(如sigmoid)导数最大值为0.25,有这类激活函数参与乘积后,使得最后要更新的梯度逐渐消失。 如果只把激活函数换成RELU,是不是就能无条件地解决掉这个问题?很明显不是,要不然残差网络就没有意义。
(2)网络退化,随着网络越深,精度达到饱和后迅速衰减。这个也与梯度变化有关,具体可见下面解析。
正常参数流动是从上到下每层都跑不掉,残差网络用了一个shortcut来为不相邻的网络层之间开辟了一条高速路,也就是说,原先网络输出结果是F(x),现在的输出要再加上之前的输入x。
我们都熟悉神经网络的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层之后做的融合是通道数叠加,相同尺寸下的通道数增加。
了解了残差网络与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,知识蒸馏,基于弱标签样本的训练方法等领域的相关算法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。