加速训练
使用非饱神经元(与梯度消失有关)和高效的GPU实现
防止过拟合
使用dropout
简单的视觉任务,利用小规模数据集有用,但是现实场景存在很大的变化,因此需要大规模数据集
有了大规模数据集,从大规模数据集中学习目标,就需要有很强的学习能力的模型
GPU和高效的卷积使得在大规模数据集上训练也不会过拟合
使用Relu
Relu比sigmoid要好是因为解决了梯度消失的问题,使得损失下降的更快
多GPU训练
GPU的并行化读取,使得训练大规模参数的时候也能够高效快速的被训练
局部响应归一化
相当于在通道上临近神经元做归一化
对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力
https://blog.csdn.net/u011808673/article/details/80476398?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162489368116780357225011%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162489368116780357225011&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogsobaiduend~default-2-80476398.pc_v2_rank_blog_default&utm_term=%E5%B1%80%E9%83%A8%E5%93%8D%E5%BA%94%E5%BD%92%E4%B8%80%E5%8C%96&spm=1018.2226.3001.4450
减小过拟合
层叠池化
减少过拟合,提高泛化能力
训练
小的L2正则化(权重衰减)不仅仅起到正则化的作用,还能降低训练误差
当误差率停止improve(上升???)的时候,手动调整学习率除以10
初始化0均值0.01方差权重,偏置常量0或1
定性评估
产看top-5误差
计算最后去全连接层(倒数第二层)输出的特征向量之间的欧式距离(相似度)
还指出
在加深网络深度,但是没有足够的带标签数据的时候,无监督的预训练也许是有效地
视频序列相比静态图像,包含的时序结构信息是非常有用的
关注网络结构设计,研究网络深度与精度之间的关系
网络构建原则
33 或11 max-pooling(不是所有的conv 后面都跟池化)
+padding是为了保持conv不变; relu
利用小卷积核进行卷积
n* n 减少参数量,相当于对大卷积核进行了正则化;
堆叠小卷积核使得增加了更多的非线性化,使得神经元学到的内容更丰富;
1*1 本质上是线性映射,感受野没变,但是额外增加了非线性话,使得神经元学到更多的内容
认为googleNet更复杂
训练
多项式逻辑回归,mini-batch SGD+momentum
L2正则化+dropout正则化
验证精度不提高,则学习率*0.1
能够更快的收敛—— <- 更深的网络和更小的卷积核导致的隐式正则化; 某些层的预初始化
初始化不好会使得梯度下降不稳定,而学习崩溃——采用预训练浅层模型来初始化深度模型(文章指出,随机初始化不预训练也行)
数据增强
裁切(不管初始尺度是多少,最终的输入大小都是224*224)+水平翻转+RGB转换
单尺度训练,和多尺度训练(通过尺度抖动实现训练集增强)
测试
首先缩放到预定义的尺度,但是没有必要等于训练时候的尺度
且在训练的时候不进行裁切,同时将最后的全连接层变成1*1的全卷积层(多尺度训练直接看yolo就行)
全局平均池化??(我觉得就是应该进行类似全局平均池化的作用,然后才能无视输入图像的尺寸变化(这里只针对分类来说,如果是检测还得在看看))(VGG测试阶段是不是全局平均池化(看源码就知道了) VGG使用的不是全局平均池化,使用的自适应平均池化)
测试阶段也进行水平翻转,然后经过softmax后平均分类得分结果
由于测试的时候是全卷积,所有就没必要做裁切。但是在训练的时候,应用大量的裁切,可以提高准确率,因为相比全卷积网络,这是对输入图像更精确的采样。
实验
https://blog.csdn.net/disguise666/article/details/105271503?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162498196816780262511080%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162498196816780262511080&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogtop_positive~default-2-105271503.pc_v2_rank_blog_default&utm_term=VGG&spm=1018.2226.3001.4450
1 * 1 卷积能够增加非线性能力,但是利用卷积核捕捉空间内上下文也很重要
具有小卷积核的深度网络优于具有大卷积核的浅网络
通过尺度抖动实现训练集数据增强是有用的,能够帮助网络捕捉多尺度图像信息
实验里的单尺度评估和多尺度评估对应的是测试集
测试时进行尺度抖动能够提高性能
多裁切测试必密集测试好一点点,且二者互补,综合二者的结果能够提高性能
模型集成效果更好(bagging)
https://zhuanlan.zhihu.com/p/33305030
https://blog.csdn.net/shuzfan/article/details/50738394
新的想法、算法、改进的网络架构,加上高性能硬件、大规模数据集和当大的模型使得CNN取得了显著的进步
算法模型在功耗和内存方面得到了很大的改进(文章在模型设计方面,不光只关注精度还关注计算效率方面)
网络构建
所有的卷积核是可学习的
大量使用1 * 1 卷积的目的:降低维度和消除计算瓶颈(这些会显示网络的尺寸),从而使得可以加深加宽网络的深度
改进网络性能直接的方式就是增加深度和宽度
但是有问题(在具有大规模数据集的时候是有效的,但是有问题,更大的尺寸具有更多的参数,就容易过拟合,尤其是在具有少量带标签数据集的时候。同时极其消耗计算资源,因此有效的计算资源分配,比任意增加网络尺寸更重要,即使最终的目标是提高性能)
解决方案:引入稀疏性,并利用稀疏性来代替全连接网络(…一系列的叙述),但是当时的运算框架对非均匀的稀疏数据处理效率低下,而GPU和CPU能够加速密集矩阵的运算,也就是对稀疏矩阵难以运算
进一步解决方法,利用卷积的稀疏性,同时利用GPU实现密集矩阵运算 既能保持网络结构的稀疏性又能利用密集矩阵的高性能计算,将稀疏矩阵聚类成较为密集的子矩阵来提高计算能力——也就是文章提出的 用密集结构成分来近似最优的局部稀疏结构——能够再适当增加计算量的同时得到显著的性能增益
https://blog.csdn.net/jugexiaolizi/article/details/84032669?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162505864916780269895855%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162505864916780269895855&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-8-84032669.first_rank_v2_pc_rank_v29_1&utm_term=inception+v1%E5%8A%A8%E6%9C%BA%E4%B8%8E%E9%AB%98%E5%B1%82%E6%80%9D%E8%80%83&spm=1018.2226.3001.4187
https://blog.csdn.net/dugudaibo/article/details/87924748?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162505864916780269895855%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162505864916780269895855&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-4-87924748.first_rank_v2_pc_rank_v29_1&utm_term=inception+v1%E5%8A%A8%E6%9C%BA%E4%B8%8E%E9%AB%98%E5%B1%82%E6%80%9D%E8%80%83&spm=1018.2226.3001.4187
第一种结构
多个卷积结构(unit)就是多个稀疏网络结构,将unit组合在一起成为bank
浅层unit关注的是输入的局部区域
为了输出对齐的方便,限制使用 1 ∗ 1 ; 3 ∗ 3 ; 5 ∗ 5 1*1;3*3; 5*5 1∗1;3∗3;5∗5的结构,这个更多的是出于方便考虑
concatenate这些模块
由于pooling层是有效的,因此在每一阶段中加入了pooling层
问题
在具有大量卷积和的深层卷积层,即使是合理的使用5*5的卷积,也是计算量很大的,当加入pooling后问题会更加严重,也就是融合pooling后导致输出数量的增加
尽管这就是将稀疏结构聚类城密集子矩阵的过程,但是会使得计算复杂度很高
解决方法——降维
第二种结构
利用 1 ∗ 1 1*1 1∗1进行降维,同时使用Relu函数增加非线性能力
只是建议在渐层使用常规的卷积网络模式,在高层中使用Inception模块,这种模式是出于训练时的内存考虑
优点
降维处理,使得增加网络深度的同时,不至于增高计算复杂度
能够实现多尺度融合和多尺度特征提取
googleNet
中间层应该是有区分性的,所以添加了额外的旁路分类器来在低层进行分类,同时防止梯度消失**???**
在推理的时候,旁路网络不使用
实验表明,训练时使用一个旁路网络就可以
测试阶段策略
集成算法
更激进的图像裁切策略,合理的裁切使得这种激进的策略没有必要
对于目标检测任务
GoogleNet与RCNN相当
改进两阶段算法,利用multi-box预测算法使得bbox的召回率更高;使用集成算法对建议区域具有更好的分类效果
只有2010的测试集标签能够被得到