Fleeting Day(VOL.14)

每日总结190507

ResNets Paper

深度网络自然地将低/中/高级特征和分类器以端到端多层方式进行集成,特征的“级别”可以通过堆叠层的数量来丰富,因此网络深度至关重要。然而构建深度网络的问题之一就是梯度消失/爆炸,使模型无法收敛,该问题已经通过一些标准初始化、中间标准化层而得到极大的解决,然而使用这些方法虽然能使深层网络收敛,网络的性能却出现退化——准确率达到饱和后便迅速下降。

将浅层网络改造为深层时,通常的做法是新加入一些网络层来进行恒等映射,其他层则直接复制浅层中学习到的知识,按道理来说这样构建出来的深层网络应该不会产生比其对应的浅层网络更高的训练误差,然而当前也无法找到更好的深层网络构建方法。

残差块

ResNets中引入残差块(residual block)解决深度网络的退化问题。设输入为$x$,期望得到基础映射(underlying mapping)为$H(x)$,那么两者的残差$F(x) := H(x) - x$,这样基础映射就可以表示成$F(x) + x$。使堆叠的非线性层进行残差映射(residual mapping)得到$F(x)$,通过“捷径(shortcut connection)”跳过一些网络层进行恒等映射(identity mapping)而直接前递$x$,两部分相加,就有上图所示的残差块。

退化问题表明求解器通过多个非线性层来近似恒等映射可能有困难,而通过残差学习进行重构,如果恒等映射是最优的,求解器可能简单地将多个非线性连接的权重推向零来接近恒等映射。

具体形式上,一个残差块可定义为:$$y = F(x, {W_i}) + W_sx$$

其中,$F$是原网络层学习到的残差映射:$$F = W_2g(W_1x)$$,为使恒等映射与残差映射大小一致,使$x$进行线性投射$W_s$来匹配维度。

多种残差块

残差块中至少要包含两层网络,除了全连接层外它同样适用于卷积层。

ResNets图

ResNets表

拥有$34$个网络层的ResNets完整结构及细节如上图所示。其中用实线标识的“捷径”表示残差和恒等映射得到的值具有相同维度。其中以$256$的批量进行训练;每个卷积之后和激活之前,进行批标准化;学习率初始为$0.1$,当误差稳定时则除以10;没有采用Dropout。

Faster R-CNN Paper

前面的R-CNN主要R作为分类器,并不能预测目标边界,最后的检测准确度也却绝育区域候选方法,而选择性搜索等区域候选方法通常依赖廉价的特征和简练的推断方案,使得区域候选成为Fast R-CNN在测试时的计算瓶颈。Faster R-CNN中在Fast R-CNN的基础上引入RPNs(Region Proposal Networks),它与进行目标检测的CNN共用卷积层而进行区域候选,大大减少计算成本。

RPN

在Fast R-CNN中卷积层提取到的卷积特征之上,可通过附加一些卷积层来构建RPN,它们同时在规则的网格的每个位置上回归区域边界和目标分数。RPN是一种全卷积网络,可针对特定的区域候选任务进行端到端训练。RPN中引入anchor boxes作为多种尺度和长宽比的参考,它可以有效候选出多种尺度和长宽比的区域,而避免像之前的目标检测方法那样枚举多种尺度和长宽比的卷积核或图片。

Faster R-CNN

Faster R-CNN由两个模块组成,第一个模块是用来进行区域候选的深度全连接CNN,第二个则是使用候选区域的Fast R-CNN检测器,两个模块共用卷积层。RPN中,以一张任意大小的图片作为输入,最后输出一系列的带有目标评分的矩形候选区域。

RPN

为生成候选区域,在最后一个卷积层输出的feature map上滑动一个小的网络,该网络以feature map的$3\times3$空间窗口作为输入,每次滑动窗口时将它们映射为低维特征(ZFnet为$256$维,VGG为$512$维,后面用ReLU激活),得到的这些特征被送入两个子全连接层——一个box回归层(reg)和一个box分类层(cls),这种结构可简单地通过一个$3\times3$的卷积层和两个$1\times1$的卷积层来实现。

在每个滑动窗口经过的的位置上,同时预测$k$个候选区域(即anchor boxes),由此reg层将输出$k$个boxes的$4k$个位置信息,cls层则输出$2k$个候选区域是目标与否的评分。每个anchor box都以窗口的中心为中心,但有各自的尺度和长宽比。这里用了3个尺度和3个长宽比,在每个滑动位置产生$k=9$个anchor box。Anchors还具有平移不变性。

训练RPNs时,给每个anchor进行二分类,将与实际box有最高的IoU或IoU超过$0.7$的anchor作为正类,单个真实box可以为多个anchor分配正标签,如果对所有真实的box,anchor的IoU都低于$0.3$,则作为负类,处于中间的anchor都是无助于训练的。

由此,有多任务损失函数:$$\mathcal{L}(\lbrace p_i \rbrace, \lbrace t_i \rbrace) = \frac{1}{N_{cls}}\sum_i \mathcal{L}_{cls}(p_i, p^{*}i) + \lambda\frac{1}{N{reg}}\sum_i p^{*}i \mathcal{L}{reg}(t_i, t^{*}_i)$$

其中,$i$是小批量中anchor box的索引,$p_i$是预测出来的第$i$个anchor为某个物体的概率,$p^{*}_i$是对应的标签,对应的$t_i$则是预测出来的$4$个box位置信息,$t^{*}i$是对应的正类anchor标签,它们用下式进行参数化:$$t{\textrm{x}} = (x - x_{\textrm{a}})/w_{\textrm{a}},\quad t_{\textrm{y}} = (y - y_{\textrm{a}})/h_{\textrm{a}},\ t_{\textrm{w}} = \log(w / w_{\textrm{a}}), \quad t_{\textrm{h}} = \log(h / h_{\textrm{a}}),\ t^{*}{\textrm{x}} = (x^{*} - x{\textrm{a}})/w_{\textrm{a}},\quad t^{*}{\textrm{y}} = (y^{*} - y{\textrm{a}})/h_{\textrm{a}},\ t^{*}{\textrm{w}} = \log(w^{*} / w{\textrm{a}}),\quad t^{*}{\textrm{h}} = \log(h^{*} / h{\textrm{a}})$$

$L_{cls}$是log损失函数,$L_{reg}$则是Fast R-CNN中用过的smooth L1损失函数;$N_{cls}$、$N_{reg}$分别为批量大小和anchor数量,用以标准化,$\lambda$则用于均衡两个任务的损失。

Summary

一整天拖拖拉拉,就看了两篇Paper,还是囫囵吞枣。昨天都干了些什么现在都记不清了。
生活。

文章作者: Hugsy
文章链接: http://binweber.top/2019/05/07/daily_190506/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sky Inside the Eyewall
支付宝打赏~
微信打赏~