『cs231n』卷积神经网络工程实践技巧_上
概述
数据增强
思路:在训练的时候引入干扰,在测试的时候避免干扰。
翻转图片增强数据。
随机裁切图片后调整大小用于训练,测试时先图像金字塔制作不同尺寸,然后对每个尺寸在固定位置裁切固定大小进入训练,最后对所有结果取平均值。
对颜色信息进行主成分分析并重建
迁移学习
三种网络训练思路:
中量数据的训练思路:先训练附加层,收敛后整体整体微调(funetuning)
值得注意:少量低相似度数据处理方式,虽然不乐观,但可以尝试不同层提取特征后组合处理(感觉和之前看的腾讯的检测文档边缘工程案例相似:基于 TensorFlow 在手机端实现文档检测)
实际上预训练模型不是特例,几乎大型计算机视觉任务都会使用预先训练好的模型加速。
卷积网络架构
感受野大小探讨
双层3*3卷积核感受野大小为5*5
三层3*3卷积核感受野大小为7*7,有意思的是这等价于单层7*7大小的卷积核
对比同感受野不同卷积结构优劣
需学习参数多层小卷积核网络更少
运算量也是多层小卷积核结构更少
[思路]:尝试把大的单层卷积分解为小的多层卷积
[问题]:3*3是最小的了,如何分解它提升效率?
分解思路一:1*1瓶颈层
尝试1*1卷积核引入提升效率,不过由于1*1的卷积核无法顾及周边信息,所以只能作为一个辅助,上图的瓶颈结构从输入输出上来看等价于单层3*3网络
对比需学习参数,我们发现还是复杂但小的结构更少
分解思路二:不对称卷积网络
另一种分解3*3卷积网络的方法,效果同样不错
这个看起来很蹩脚的网络架构(不对称卷积网络)主要由Google使用,它自家的Inception有复杂的不对称网络&特征拼接结构(如上图),有意思的是我学习tensorflow时尝试写过Inception3的最终层结构,的确是个脑洞大开的东西,看了这节课才算明白了人家为什么这么设计。注意,上图同时也使用了1*1瓶颈层。
总结: