神经网络优化思路

一,通用优化技巧

1.1 数据增强

数据增强(Data Argumentation)则是从数据层面解决过拟合,提高模型的泛化性(generalization),通用的数据增强方法有:几何变换、颜色抖动(color jitter)、噪声(高斯噪声)、Cutout(遮掩一部分)、PCA jitter等等

  • 几何变换:裁切、缩放、水平翻转、旋转、 平移、仿射变换等。
  • 颜色抖动:亮度、色调、饱和度、对比度。

注意:一定要做图像亮度变换增强,亮度鲁棒性会更好,但是要结合你的数据的亮度分布自适应的调整

代码参考:【SSD算法】史上最全代码解析-数据篇 

1.1.1 Mixup

简单来讲就是将两张图片通过不同的比例进行融合,同时图片对应的one-hot编码也以相同的比例相乘,从而构造出新的数据集。 本质上,mixup在成对样本及其标签的凸组合(convex combinations)上训练神经网络,可以规范神经网络,增强训练样本之间的线性表达。 其优点是:

  • 改善了网络模型的泛化能力
  • 减少对错误标签的记忆
  • 增加对抗样本的鲁棒性
  • 稳定训练过程,部分解决 “Elephant in the room”问题

1.1.2 Classfication Head Label Smoothing

Label Smoothing 原理简单来说就是:在分类的时候,比如二分类把原先的标签(0,1) (称为hard target) 转成 soft target,具体方法就是 y‘ = y (1 − α) + α/K 这里α 是个超参数常量,K就是类别的个数 。

参考:目标检测算法优化技巧

1.2 卷积核相关

常用技巧:batchnorm一定要用、xavier初始化、

  • 网络能深则深,在保持比较小宽度的时候,要想办法加深网络,变深的过程中网络慢慢变胖(金字塔型或者沙漏型)
  • 下采样在网络前几层的密度大一些,(这样能尽可能用微弱精度损失换取速度提升) 越往后下采样的密度应该更小,中间层下采样频率降低,并使用不下采样的方法(如空洞卷积)提高深度。 注意:最终能够下采样的最大深度,以该层的感受野以及数据集中最大的有意义物体尺寸决定(自然不可能让最大有意义的物体在某一层被下采样到分辨率小于1,但是网络依然可以work,只不过最后几层可能废弃了(相信cnn的学习能力,因为最大不了它也能学出单位卷积,只有中心元素不为0的卷积核),更准确的说这是最大感受野的极限,最大感受野覆盖最大有意义的物体)
  • shortcut connection里,找不到concat,用add凑合吧
  • 先训一个大模型然后裁剪,也许比直接训一个小模型性能好
  • 能用可分离卷积替代的卷积一定要替代,一般除了第一个卷积,都能替代,替代完后考虑给替代可分离的通道数乘以2,因为可分离卷积的参数和计算量都是线性增长的,3*3卷积+1*3卷积+3*1卷积=白给的精度提升。同样的道理适用于2+1分离卷积。
  • inception或者shortcut connection或者dense connection其实都相当于ensemble模型,考虑结合使用,shortcut connection的使用几乎是无痛的
  • 如果你的分类精度不够是因为有两类或者多类太相近造成的,考虑使用其他softmax,比如amsoftmax。

参考:快2020年了,你还在为深度学习调参而烦恼吗?

1.3 loss相关

常用的loss有focal loss(正负样本不平衡时)、triple loss(学习困难样本)

1.2.1 模型裁剪

1.3 训练策略

1.3.1 余弦学习率+warmup

上图是step方法和cosine方法的对比,预先的方法上升更快,不过最终结果比较接近

由于刚开始训练时模型的权重(weights)是随机初始化的(全部置为0是一个坑,原因见[2]),此时选择一个较大的学习率,可能会带来模型的不稳定。学习率预热就是在刚开始训练的时候先使用一个较小的学习率,训练一些epoches或iterations,等模型稳定时再修改为预先设置的学习率进行训练。论文[1]中使用一个110层的ResNet在cifar10上训练时,先用0.01的学习率训练直到训练误差低于80%(大概训练了400个iterations),然后使用0.1的学习率进行训练。

1.4 通用技巧

1.4.1 特征图可视化

二,目标检测优化

2.1 多尺度特征融合

常用的方法有:

  • 第一种:图像金字塔(不常用),将输入图片放缩成不同比例,将预测结果融合得到最终输出
  • 第二种:特征融合,融合 Encoder阶段的多尺度特征和Decoder上采样特征以恢复空间分辨率
  • 第三种:在原始模型的顶端叠加额外的模块,以捕捉像素间长距离信息。例如Dense CRF,或者叠加一些其他的卷积层
  • 第四种:Spatial Pyramid Pooling空间金字塔池化,使用不同采样率和多种视野的卷积核,以捕捉多尺度对象

2.1.1 双向特征图融合 - BiFPN 

自底而上和自上而下的双流向(高维和低维)特征融合,配合使用skip-connection和weight(起到自注意力机制的作用),达到速度和精度的良好平衡

EfficientDet(51mAP,weight: 51.9M) 算法解读 

注:FPN的结构如下:单向特征融合,但其上采用没有使用 反卷积和插值,只是简单的复制,具体见 KL.UpSampling2D

2.1.2 空洞卷积级联-ASPP

解决连续stride导致信息损失

如图3(a)中引入的stride使得更深的模块更容易捕获长距离的信息,整个图像的特征都可以汇聚在最后一个小分辨率的特征图中,但是连续的stride对语义分割是有害的,会造成细节信息的丢失,因此采用不同采样率的空洞卷积。如图3(b)中,输出步幅为out_stride = 16

2.1.3 自适应空间特征融合-ASFF

解决在单阶段目标检测特征金字塔中存在的这种不一致问题. ASFF 能够让网络去学习如何在空间上过滤其他层的无用信息, 只保留有用信息去combination,用特征金字塔检测物体时, 存在一个启发性式特征选择机制, 大的intance对应高层的feature map, 小的instance对应低层的feature map. 当一个某一特征层的实例属于positive sample, 这意味着在其他特征层上相应的那部分区域将被是为背景. 这种不同level特征之间的冲突、这种不一致会干扰训练时的梯度计算,降低了特征金字塔的有效性。

注意:ASFF与backbone无关,适用于所有具有特征金字塔结构的单阶段检测器

   

ASFF的关键思想是自适应地学习每个尺度特征图的融合空间权重,分为两步:恒等缩放和自适应融合。

恒等缩放:1/2下采样:3*3 conv/stride=2;1/4下采样:3*3 conv/stride=2 + max pooling/stride=2。上采样:1*1 conv/stride=1 + interpolation。每个特征层都缩放成统一的shape,然后根据权重 spatially fused, 例如, 如果现在要将level 1、level 2、level3融合成ASFF-1, 首先需要对level 2、level 3进行下采样, size一样了再融合. 

自适应融合:融合后空间位置(i, j)处的向量是融合前三个特征图(i, j)处的向量的加权融合,系数(特征图的空间重要性权重)是由网络自适应学习到的,他们在所有通道间是共享的。作者限制(softmax可以轻易的算出来)。作者用一个1*1卷积来计算softmax中的系数 。所以他们可以用标准的BP算法来进行优化

 其中 

注意:自适应权重参数是二维的(ij)参考:Adaptively Spatial Feature Fusion (ASFF)

2.2 anchor 相关

以往目标检测的anchor通常是一组超参,如ssd(ssd_pascal.py)结合feature map大小通过定义 k 个特定尺度(scale)和长宽比(aspect ratio)的 anchor来控制、yolo3以上的系列通过kmean聚类coco数据集的bounding box来获得,好处是可以根据实际需要检测目标对bounding box 进行调整(如手势检测时少生成小box,避免检测远处的小目标等),缺点就是性能受经验超参影响、如果尺度和长宽比设置不合适可能会导致 recall 不够高、 anchor 过多影响分类性能和速度、导致正负样本失衡,导致网络只是在学习负样本,通常需要进行 hard negative mining(正负1:3比例)、或者引入 Focal Loss 等来平衡。

通常使用 4 个数 (x, y, w, h) 来描述一个 anchor,将 anchor 的分布 formulate 成如下公式:


Anchor 的概率分布被分解为两个条件概率分布,也就是给定图像特征之后 anchor 中心点的概率分布,和给定图像特征和中心点之后的形状概率分布,这也是论文标题中 Guided Anchoring 的由来。Sliding window 可以看成是 p(x,y|I) 是均匀分布,而p(w,h|x,y,I)是冲激函数的一个特例。根据上面的公式,anchor 的生成过程可以分解为两个步骤,anchor 位置预测和形状预测。

2.2.1 RPN

上图为RPN的整个过程,一个特征图经过sliding window处理,得到256维特征,然后通过两次全连接得到结果2k个分数和4k个坐标;

1)3x3的sliding window看作是对特征图做了一次3x3的卷积操作,最后得到了一个channel数目是256的特征图,尺寸和公共特征图相同,我们假设是256 x (H x W),然后我们要对每个256维特征向量做两次全连接操作,一个得到2个分数,一个得到4个坐标,需要注意:4个坐标是指针对原图坐标的偏移

2)首先我们知道有H x W个结果,我们随机取一点,它跟原图肯定是有个一一映射关系的,由于原图和特征图大小不同,所以特征图上的一个点对应原图肯定是一个框,然而这个框很小,比如说8 x 8,这里8是指原图和特征图的比例,所以这个并不是我们想要的框,那我们不妨把框的左上角或者框的中心作为锚点(Anchor),然后想象出一堆框,具体多少,聪明的读者肯定已经猜到,K个,这也就是图中所说的K anchor boxes(由锚点产生的K个框);换句话说,H x W个点,每个点对应原图有K个框,那么就有H x W x k个框默默的在原图上,那RPN的结果其实就是判断这些框是不是物体以及他们的偏移;那么K个框到底有多大,长宽比是多少?这里是预先设定好的,共有9种组合,所以k等于9,最后我们的结果是针对这9种组合的,所以有H x W x 9个结果,也就是18个分数和36个坐标,最后通过分数来选择最终box; 

参考:RPN 解析

2.2.2 Guided Anchoring

Guided Anchoring,即通过图像特征来指导 anchor 的生成。通过预测 anchor 的位置和形状,来生成稀疏而且形状任意的 anchor,并且设计了 Feature Adaption 模块来修正特征图使之与 anchor 形状更加匹配

主要分为3块:

  • location:中心位置预测,预测那些区域应该作为中心点来生成 anchor,是一个二分类问题。不同于 RPN 或者 segmentation 的分类,这里我们并不是预测每个点是前景还是背景,而是预测是不是物体的中心。
  • shape:形状预测分支的目标是给定 anchor 中心点,预测最佳的长和宽,然而这玩意的 target (w、h)并不好计算,而且实现起来也会比较困难,所以直接使用  bounded IoU Loss 作为监督,来学习 w 和 h。
  • Feature adaption :在原来的 RPN 里面,大家都表示相同形状的 anchor(对应的特征向量相同),所以相安无事,但是现在每个 anchor 都有自己独特的形状大小,和 feature 就不是特别好地 match。另一方面,对原本的特征图来说,它并不知道形状预测分支预测的 anchor 形状,但是接下来的分类和回归却是基于预测出的 anchor 来做的,可能会比较懵逼。因此增加了一个 Feature Adaption 模块来解决这种问题。思路很简单,就是把 anchor 的形状信息直接融入到特征图中,这样新得到的特征图就可以去适应每个位置 anchor 的形状。我们利用一个 3x3 的 deformable convolution 来修正原始的特征图,而 deformable convolution 的 offset 是通过 anchor 的 w 和 h 经过一个 1x1 conv 得到的

参考:Guided Anchoring: 物体检测器也能自己学 Anchor

四、网址收藏

github gluon-cv 、CenterTrack

yolov4 

参考资料:

DeepLab V3 论文笔记 - 知乎

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘要:数据的上界和下界概念在人工智能领域中使用得非常普 遍,在粗糙集理论中尤为明显,随着粗集理论的不断发展, 上下边界的概念得到更大范围内的应用。本文将经典的神经 网络和粗集理论有机地结合,提出了一种基于粗集理论的神 经网络,并应用神经网络的粗糙模式建立预测模型。在粗糙 模式下每个神经网络的输入值不是一个单值而是一对值,即 上下边界数据,经典的神经网络在预测模型中采用的是单值 数据作为输入值,但是在一些应用中会产生问题,如医院要 对病人进行病情的跟踪观察,并希望对其未来的情况进行预 测,这时经典的神经网络就难以适用了,对于一个病人来 说,心跳次数,脉搏次数,血压值,体温等项指标在一天当 中需要进行几次测试,问题在于对于同一项指标每次测量值 也是不同的,因此得到的是一组数据而非单个数据,由于经 典的神经网络对于外界的信息的传导需要的是单值输入,究 竟应该取测量值中的哪个值作为输入就难以确定,通常的方 法是将测量数据进行数学平均,以均值作为网络的输入,但 是这可能导致具有重要性质数据的泛化,而粗糙集理论则可 以很好地解决这个问题,粗糙集数据的上下边界可以将病人 一天的各项指标测量值的上界和下界数据作为粗糙神经元的 输入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值