《Deep Learning for Computer Vision with Python》PractitionerBundle-总结概述
Posted wyy_persist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Deep Learning for Computer Vision with Python》PractitionerBundle-总结概述相关的知识,希望对你有一定的参考价值。
《Deep Learning for Computer Vision withPython》
PractitionerBundle总结概述
//2022.2.5日下午17:33开始总结
第1章-介绍
- PractitionerBundle卷主要介绍的是深度学习中提高准确性的方法(包含:迁移学习中的微调或将预训练的网络作为特征提取器),并探讨集成学习方法。
- 数据增强可以提高模型的泛化能力。
- 同时也介绍了更高级的优化算法;
- 然后介绍更大的数据集和更加奇特的网络;(包含数据集的HDF5格式,实现了大数据集不可放入内存时的训练过程)。
- 将讨论AlexNet GooLeNet ResNet VGGNet架构,并应用于kaggle竞赛中的dogs vs cats数据集和Tiny ImageNet;
- 本卷也包含了基本的目标检测,深度inception和神经style,GANs对抗网络和图像超分辨率的内容;
第2章-数据增强
- 数据增强也是一种正则化的方法,主要是通过增大训练误差并减少测试误差的方式来实现精确度的提高。
- 同时,数据增强也在一定程度上减少了寻找新的数据的工作量。
- 包含的技术有:随机抖动和扰动。应用数据增强的目的是增强模型的通用性;
- 数据增强的数据不会在测试过程中使用;
- 计算机视觉领域中数据增强的技术包含:转变,旋转,级的变化,剪切,水平(或垂直)翻转;也包含:给定颜色空间中颜色的随机扰动[6]和非线性几何畸变。
- 数据增强的可视化实例;
- MiniVGGNet在Flowers-17数据集中使用数据增强与否对train过程的影响;
第3章-网络作为特征提取器
- 迁移学习方法第一种:网络作为特征提取器(去掉了网络原本自带的分类层)对图片特征进行提取,然后使用我们自己的classifier作为分类器,在不同的任务中进行分类;
- 迁移学习方法第二种:微调。即使用原本预训练完成的较强大的网络作为特征提取器,去掉网络中原本的FC层,而使用我们自己设置的新FC层;
- 介绍HDF5格式数据集,可以实现大量数据集的存储,实现快速访问,具有专门的数据结构。
- HDF5格式是标准化的,可以被使用其他语言的开发者访问。
- Animals数据集 CALTECH-101数据集 Flowers-17数据集中提取特征的实例;
- 在提取的特征上训练自己的分类器;
第4章-理解rank1rank5不同级别的准确性
- 在Flowers-17数据集上的精确度排名;
- 在CALTECH-101数据集上的精确度排名;
第5章-微调网络
- 该方法比特征提取的方法表现得更好;
- 使用非常小的学习率来训练网路,这样新的FC层就可以从网络中先前学习到得CONV层中学习模式;
- 在进行微调网络的时候需要先对新的FC头进行热身,一般为25个epoch,然后这个时候考虑是否需要“解冻”FC层之前的各层,进行从头到尾的训练;
第6章-利用网络集成提高精度
- 通过将多个模型的性能进行平均可以得到一个高于单个模型预测精度的集成模型;
- 集成方法的理论基础是Jensen不等式;
- 典型的集成方法例子:AdaBoost方法和Random Forest技术;
- 构建一组CNN网络实现对某种任务的预测精度的提高;使用for循环实现在一个脚本中训练多个网络;
- 在使用网络集成之前,需要首先进行实验确定那种架构、优化器和超参数的组合能够产生足够的精度;然后,再进行多个模型的训练;
- 为了减轻训练多个模型的计算负担,可以使用循环学习速率计划在单个训练过程中训练多个模型;该方法的工作原理是先以较高的学习率开始训练,然后快速降低学习率,节省模型权值,然后在不重新初始化网络权值的情况下将学习率重新设置为初始值。这一行动使网络理论上能够在训练过程中多次将覆盖范围扩展到局部最小区域(或至少是低损耗区域)。
第7章-先进的优化方法
- 更加先进的优化方法:减少时间以获得合理的分类精度,使网络在更大范围的超参数下表现得更好;理想情况下获得比SGD更高的分类精度;
- Adagrad,Adadelta,RMSprop,Adam,Nadam优化方法的介绍和伪代码解释详见本人发表的PractitionerBundle章节的阅读笔记;
- 应该学会的三个优化方法:SGD Adam RMSprop方法;
第8章-应用深度额学习的最佳途径
1. 训练深度学习模型最困难的部分是:观察Loss/acc曲线;
2. 训练网络的秘诀见本人发表的PractitionerBundle章节阅读笔记;
3. 构建自己的图像数据集没有捷径可走。如果你希望深度学习系统在给定的真实世界环境中获得较高的精度,那么请确保这个深度学习系统是在代表它将部署的位置的图像上训练的,否则你将会对它的性能非常失望。
4.四组数据拆分:训练,训练验证,验证,测试;
5.将60%分为训练,40%的数据用于测试,在测试数据中将一部分用于验证,另一部分用于真正的测试;这部分真正用于测试的数据即:在测试之前见不到的数据;
6.从测试集中取出一部分数据,放入到“训练-验证集”中,训练集用于帮助确定模型的偏差,而训练验证集将确定方差;
7.训练过程中出现的各种情况和解决办法:
(1)train loss过高:考虑深化网络结构,尝试更长的训练时间;
(2)训练验证误差很高:应该检查网络中的正则化参数;考虑使用更多的训练数据;
(3)验证集错误很高:需要检查训练数据和验证数据是否是相似的;
(4)测试误差很高:可能是由于过度拟合;那么需要为验证集收集更多的数据,以帮助识别过度拟合发生的时间;
8.迁移学习还是从头开始训练的决定策略;需要考虑数据集的大小;训练的CNN和原有的CNN的相似性;主要有以下四个方面:
(1)数据集很小,且和原始数据集相似:应该使用预训练网络作为特征提取器,然后在新的数据集上训练分类器;
(2)数据集很大并且和原始数据集相似:使用微调(注意两种方法:一种是首先进行特征提取然后训练新的分类器;一种是去掉原来网络中的FC层,然后添加新的自己的FC层);
(3)数据集很小并且与原始数据集不同:使用预训练网络中的较低层次作为特征提取器,然后训练自己的分类器;
(4)数据集很大并且不同于原始的数据集:一种方法,从头开始训练网络;另一种方法:使用预训练网络中的权重并调整(微调);建议首先进行微调;
第9章-使用HDF5和大数据集
1.本章使用的案例是:Kaggle:dogs vs cats;
2.注意使用配置文件,可以方便在脚本中的路径等信息的获得和使用;
3.构建HDF5数据集实例;
第10章-在Kaggle竞赛中:dogs vs cats
1.HDF5数据集可以极大减少的I/O操作的资源消耗;
2.创建的一些额外的图像预处理器:均值化处理,Patch 预处理,Crop处理;
3.实现AlexNet架构实例;
4.使用ResNet提取特征实例;
第11章-GoogLeNet
- 模型架构本身很小;
- 模型中使用了微架构Inception模块;
- 关于Inception模块的介绍详见本人之前发布的文章PractitionerBundle系列;
- MiniGoogLeNet在CIFAR-10数据集上的训练实例;
- 在Tiny ImageNet数据集上的挑战实例;
- DeeperGoogLeNet在Tiny ImageNet数据集上的测试实例;
第12章-ResNet
- ResNet使用残差模块来训练CNN达到了很深的深度;
- 关于原始的残差模块和瓶颈残差模块之间的区别深入分析;
- 预激活层序可以获得更高的准确性;
- ResNet实现实例;
- ResNet在CIFAR-10数据集上的测试;
- ResNet在Tiny ImageNet数据集上的测试;
本文作为PractitionerBundle的概述总结,主要用于向读者列出了书中每章节的大致内容,可以配合笔者之前发布的PractitionerBundle系列博客进行阅读。
上述案例及所有代码详见本人github地址:
以上是关于《Deep Learning for Computer Vision with Python》PractitionerBundle-总结概述的主要内容,如果未能解决你的问题,请参考以下文章
李宏毅——Optimization for Deep Learning
李宏毅——Optimization for Deep Learning
Kernel Methods for Deep Learning