项目实训总结

探索历程

“图像照片的打假”是我们小组的选题,探索历程如下图(摘自我们最后展示的PPT)所示:
在这里插入图片描述

实训心得

头脑风暴

  1. 书到用时方恨少,有时间时可以看看相关的知识,不一定要求学得有多专业,但多了解一些,在做项目时真的很有帮助,最直接的就是你可以少走弯路。多和老师沟通是一方面,但自己能不能完全体会是另一回事,比如说在老师说了flask这个轻量级框架之后,我仍然花费时间学习django,不能说没有用,但针对性不是很强,况且最后时间缘故也没有用上。
  2. 不可以贪多,还是要具有针对性一些。系统学习固然很好,但实践下来几乎不可行,时间紧的情况下,针对性学习相关知识解决问题才是硬道理。
  3. 网速是硬伤,conda是个坑(可能是我这方面处理的不是很好),前期主要工作就是倒包,配置环境,可以说有一个月时间我们耗在了这方面(包括Linux平台双系统的安装),之后学院网速升级,加之王冠级别软件Pycharm的摸索使用,倒包问题才彻底解决(当然最简单的虚拟环境Virtuenv与pip安装也是真香)。
  4. 任务分配方面,大致是一个人读Paper,两个人写Programm。Paper主要是一些参考的文献,为后续的修改提供基础支持;写程序主要是封装代码,进行展示,所以进行了页面的搭建以及简单的微信小程序的制作。
  5. 找参考资料就涉及到相关的搜索技巧,强烈建议数据科学人工智能方向的同学,利用好Kaggle,github等平台,不利用的话感觉血亏。
  6. 科学上网方面,时间有限的话,和同学合租也是一个不错的选择,自己搭建的话费时费精力,最后效果还不一定能实用(也欢迎相关道友指教)。毕竟,是为了查资料,该走的流水还是让它走吧。
  7. 不去做的话,想到成绩,永远会有压力,真正实践时也会发掘没有自己想得那么复杂,至少配不上自己所承受的压力,所以思考固然重要,但高效的思考和实践出成果,个人觉得更有价值。

其他的暂时搁置,Say Say 感觉最有用分享的就是各种网络的学习

数据集和比赛

在这里插入图片描述

ImageNet

是一个超过15 million的图像数据集,大约有22,000类。
是由李飞飞团队从2007年开始,耗费大量人力,通过各种方式(网络抓取,人工标注,亚马逊众包平台)收集制作而成,它作为论文在CVPR-2009发布。

ILSVRC

ImageNet Large-Scale Visual Recognition Challenge,平常说的ImageNet比赛指的是这个比赛。

深度学习网络

AlexNet

在这里插入图片描述

  1. 贡献:ILSVRC2012冠军,掀起CNN研究的热潮。ImageNet比赛为一直研究神经网络的Hinton提供了施展平台,AlexNet就是由hinton和他的两位学生发表的,在AlexNet之前,深度学习已经沉寂了很久。
  2. 网络结构:8层网络,参数大约有60 million,使用了relu函数**,头两个全连接层使用了0.5的dropout**。使用了LRN和重叠的池化,现在LRN都不用了,一般用BN作Normalization
  3. 预处理:先down-sample成最短边为256的图像,然后剪出中间的256x256图像,再减均值做归一化(over training set)。 训练时,做数据增强,对每张图像,随机提取出227x227以及水平镜像版本的图像。除了数据增强,还使用了PCA对RGB像素降维的方式来缓和过拟合问题
  4. 预测:对每张图像提取出5张(四个角落以及中间)以及水平镜像版本,总共10张平均10个预测作为最终预测
  5. 超参数:SGD,学习率0.01,batch size是128,momentum为0.9,weight decay为0.0005(论文有个权重更新公式),每当validation error不再下降时,学习率除以10。权重初始化用(0,0.01)的高斯分布,二四五卷积层和全连接层的bias初始化为1(给relu提供正值利于加速前期训练),其余bias初始化为0。

VGG

在这里插入图片描述

  1. 贡献:ILSVRC2014定位任务的冠军(Winner),分类任务的亚军(runner-up)。该网络的特点在于结构规整,通过反复堆叠3x3的卷积,卷积核数量逐渐加倍来加深网络,后续的很多CNN结构都采用了这种3x3卷积思想,这是一个很大的影响。ZFNet和OverFeat都使用了更小的卷积核,更小的步长来提升AlexNet的表现,相比之下,VGG则是探索CNN的深度,通过固定其它参数,然后稳定地叠加深度。
  2. 网络结构
    VGG-16,16层,参数大约有138 million。实验发现LRN的加入没有提升反而更差,舍弃使用。实验发现1x1效果更差,于是没有使用**,1x1卷积在Network in Network(颜水成)中提出推广,是很重要的思想,在GoogleNet和ResNet都有用到。**
    使用小卷积核3x3可以捕捉左右上下的信息,而且利于堆叠深度(保证参数不要过大)。步长为1。same卷积。
    两个3x3卷积可以和5x5卷积达到一样的感受野。三个3x3卷积可以和7x7卷积达到一样的感受野。使用三个3x3的好处在于使用了3个非线性变换,同时减小了参数。 和AlexNet一样,头两个全连接层后面加0.5的dropout。
  3. 超参数:和AlexNet基本一致。batch size是256。初始化也是用(0,0.01)的高斯分布,只不过VGG先训练一个浅层的网络,然后把浅层网络的部分参数来初始化深层网络部分参数,其它参数还是用高斯分布。值得注意的是论文提交后VGG发现使用glorot的初始化方法可以不用预训练。
  4. 预处理:和AlexNet不同,在下采样的时候不是变成256,变成一个S,S有两种方法来设定。第一个方法是固定的S(single-scale),固定为256或384。为了加速384的网络,用256预训练的模型进行权重初始化。另外学习率调小为0.001。第二个方法从[256, 512]中随机采样S(multi-scale,注意这里的是multi-scale training,和overfeat中的multi-scale test含义不一样),这可以看成用尺寸抖动(scale jittering)对训练集进行增强。为了加速,使用384预训练的模型进行权重初始化。
  5. 预测:采用了AlexNet的10 views法(VGG论文中把它称作multi-crop评估)和overfeat的多尺度预测方法(VGG论文中把它称作dense评估)相结合。在OverFeat已经提到了multi-crop是有缺点的,存在冗余的卷积计算,所以使用了dense评估,但是Inceptionv1的论文中提到multi-crop使用大量crops能提高准确率因为它的采样更精细。而VGG认为实作上准确率的提升不足以弥补速度,但是为了参考起见,还是跑了multi-scrop的方法。在实验中,两者结合优于multi-crop优于dense,好那么一点点,差别不大。
  6. 集成:实验的最后融合了多个模型(集成),最好的模型是融合了**VGG-16和VGG-19,**训练使用multi-scale training,测试使用multi-crop和dense评估相结合。在AlexNet,ZFNet和OverFeat最后的实验都会使用集成,最好的模型一般都是集成的结果
  7. 定位:VGG的定位任务的模型是在OverFeat的基础上做了一些修改。对于bounding box的预测有两种,SCR(single-class regression)是所有类共享一个框,这时最后输出是4维向量。PCR(per-class regression)是每个类一个框,这样最后输出就是4x1000,其中1000表示1000类。
  8. 泛化:和ZFNet一样,VGG也做了迁移学习,用ILSVRC的数据预训练,然后迁移到其它数据集VOC-2007,VOC-2012,Caltech-101,Caltech-256
    在这里插入图片描述

GoogLeNet(Inceptionv1)

在这里插入图片描述

  1. 贡献:ILSVRC2014分类任务的冠军。该网络设计了Inception块代替人工来选择卷积类型,然后堆叠Inception块(增加深度)形成Inception网络。去除了全连接层(占据了网络的大部分参数),使用了全局均值池化(思想来自Network in Network),大大减小了参数量。这两个思想在GoogleNet后面的一些论文中都有体现,一个是Inception块的自动选择网络结构(Google后面发表了一些自动选择网络超参,网络优化器,网络激活函数的论文),另一个是减小模型参数和计算资源(Google的mobileNet,类似工作还有face++的shuffleNet)。
  2. 网络结构:如下图所示为Inception块。网络总共有22层,图太大,这里就给个表格。可以看到虽然把全连接替换成了全局均值池化(这后面还是使用了0.4的dropout),但是网络图中最后还是有一个全连接层,这是为了便于把网络fine tune到其它数据集。
  3. 参数:为了提升模型表现,典型的办法是增大模型(增加深度或宽度),但是这样会带来过大的参数,然后导致计算资源增大而且需要的数据更多(而高质量数据往往是昂贵的),所以要考虑降低参数。Inceptionv1虽然有22层的参数却只有5 million,是同期VGG16(138 million)的1/27,是AlexNet(60 million)的1/12而准确率却远胜AlexNet。
  4. 1x1卷积好处:减小了参数,允许增加深度; 可以降维,构建瓶颈层来减小计算成本,Inception块中就是通过在3x3和5x5后面加入1x1来减小计算;增强了网络的表达能力(可以根据自己的意愿,或压缩或增加或保持通道数)。还有配合全局均值池化来代替全连接层,这个就是为了能大大减小模型的参数。1x1的思想也来自Network in Network。
  5. 超参数和预处理:因为比赛的过程做了很多变动,包括采样方法和各种超参,所以很难定义一个有效的指导去训练这个网络。只给出了几个超参数,固定学习率,每8epoch下降4%,momentum是0.9。
  6. 预测:先下降样出256,288,320和352大小,分别从左中右三个方位裁(如果是人画像则从上中下三个方位裁),然后从4 corners和center剪出224x224再加上把正方形缩放到224,以及它们的水平镜像。这样就可以得到4x3x6x2也就是144个crops,最后对crops取平均。
  7. 集成:和之前的网络一样,最后也使用了集成,训练了7个版本的网络进行集成,使用Polyak averaging进行平均,7个网络使用一样的初始化和学习率设置,不同之处在于数据采样的方法和顺序
  8. 目标检测:Inceptionv1的目标检测使用了类似R-CNN的方法来完成。
    辅助输出:Inceptionv1中有两个辅助输出,说是因为太深的网络的梯度回传能力有限(梯度消失),于是在中间层接另两条分支来利用中间层的特征,可以增加梯度回传,还有附加的正则化作用。然后在v3的论文中又提到说利用中间层特征的想法可能是错的,因为去掉低层的辅助(第一个辅助输出)对最终结果并没有什么影响,但是还是强调了辅助输出的正则化效果,因为在辅助输出中加入BN和dropout可以提升主输出表现

在这里插入图片描述
在这里插入图片描述

ResNet

  1. 贡献**:ILSVRC2015冠军(分类,检测,定位),由MSRA的何铠明等人提出**,通过使用残差块训练了152层的网络,降低了错误率。解决了退化问题(plain网络随着网络加深,错误率升高),而使用残差后,随着网络加深,错误率还是能下降。
> 通过快照,至少不下降
  1. 网络加深:对于网络加深,会出现梯度消失或梯度爆炸,这个问题可以通过正则初始化(何凯明初始化等等)和BN来解决。
  2. 退化问题:然而深层网络到了一定深度,准确率趋近饱和,而且继续加深的话会降低准确率,这称为退化问题(degradation),而且这个问题并不是过拟合导致的(过拟合在训练集应该更好),也不是梯度消失造成的(论文检查了梯度)。
  3. 残差块:为了解决退化问题,提出了残差学习,如下图所示为残差块,假设本来是要学习H(x),加了一条恒等映射之后我们要学习的就是F(x) = H(x) - x,(假设)学习F(x)会比学习H(x)更容易,最极端的情况就是假设我们要学习的映射是x,那么让F(x)为0,比学习到H(x)为恒等映射要容易。这种做法的motivation是,如果增加的层能被构建成恒等映射层,那么一个更深的网络的准确率至少不会低于浅层网络
  4. 残差块的相加:当残差块的输入和输出不是相同维度时(因为部分残差块会使用stride为2的卷积来降采样),有两种方法来保证维度一致,一个是补0,另一个是乘以W矩阵做映射(使用1x1卷积)。
  5. 训练配置:预处理时像VGG一样随机采样[256, 480]的scale,然后像AlexNet一样crop出224x224的图像以及水平翻转,然后做mean substracted。预测时候使用AlexNet的10-crop测试法,最好的结果是跟从VGG中的全卷积后的multi-scale评估,scale为{224, 256, 384, 480, 640}。在每个卷积的激活前使用BN,不使用dropout。何凯明初始化。SGD,batch size为256,学习率从0.1开始每次错误率平缓时就除以10,模型训练了60万个iteration,权重衰减为0.0001,momentum为0.9。
  6. Identity和projection:对于残差块的相加,有三种配置,A配置是捷径用identity,需要增加维度时的捷径补0。B配置是捷径一般都用identity,但是增加维度时使用映射。C配置是所有捷径都使用映射(1x1卷积)。表现是C>B>A,但是三者差异不大,实作上不会使用C,因为C增加了参数和计算
  7. 网络结构:论文阐述了ResNet-18-34-50-101-152。其中ResNet-18/34使用配置A,ResNet-50/101/152使用配置B,此外使用了bottleneck结构,如下第一个图的右图所示。
  8. 其它实验:除了在ImageNet上,还在CIFAR-10上做了实验。还在Pascal和MS COCO上做了目标检测的实验。检测使用的是Faster R-CNN的算法。经典目标检测算法(R-CNN,Fast R-CNN,Faster R-CNN,YOLOv1-v3中介绍了相关的几个经典检测算法。
    在这里插入图片描述

参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Linux飞鸽传书是一种基于Linux系统的即时通讯工具,它可以在同一局域网内进行文件传输、文字聊天、远程控制等操作。如果你想进行Linux飞鸽传书项目实训,可以按照以下步骤进行: 1. 确定项目目标:你需要明确你的实训目标,是想学习Linux系统的基础知识还是想深入了解即时通讯软件的设计和实现? 2. 环境搭建:为了进行Linux飞鸽传书的实训,你需要先搭建好Linux系统。你可以选择在虚拟机中安装Linux系统,或者直接安装在实体机上。安装好系统后,你需要配置好网络环境,确保可以进行局域网内的通信。 3. 获取代码:你可以通过Github等代码托管平台获取Linux飞鸽传书的代码。在获取代码后,你需要进行代码的编译、安装等操作,确保可以正常运行。 4. 进行实训:在安装配置好Linux飞鸽传书后,你可以进行实际的使用和测试。你可以尝试进行文件传输、文字聊天、远程控制等操作,以深入了解Linux飞鸽传书的功能和实现原理。 5. 总结反思:在实训结束后,你需要对整个实训过程进行总结和反思。你可以回顾自己的学习过程,发现问题并进行改进,同时也可以分享你的经验和心得,帮助他人更好地进行实训。 总之,Linux飞鸽传书项目实训需要你具备一定的Linux基础知识和编程能力,同时也需要你有一定的实践经验。通过实训,你可以深入了解即时通讯软件的设计和实现,提高自己的技能水平。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值