各个模型特征总结学习

来源:互联网 发布:浙大网新恒天软件福利 编辑:程序博客网 时间:2024/06/18 12:41

本文参考:http://blog.csdn.net/column/details/ym-alanyannick.html

Lenet

输入图片为n*n,kernel为a*a,stride为b。计算下一层的特征图范围x*x:
x=[(n-a)/b]+1

AlexNet:

AlexNet中LRN,感觉是个难点,中文翻译为局部响应值归一化,参考书中写的作用为:
有助于模型的泛化,将模型Top1和Top5的错误率分别降低了1.4和1.2.
参考卜居的博客
LRN有两种模式:across_channels和within_channels.需要定义的参数有:

  1. norm_region 模式
  2. local_size 默认为5
  3. alpha 缩放因子
  4. beta 指数项
    这里写图片描述
    AlexNet使用了两个尺寸为4096的全连接层,最后一个有1000个神经元的全连接层用于计算分类评分

googlenet

googlenet的只要创新是利用multi-scale data training(多尺度数据训练)的思想,代码中的实现结构式是:inception结构。增发网络宽度。(http://blog.csdn.net/u010402786/article/details/52433324)这篇博客对inception结构做了大致的讲解。结构的整体框架是,前面两个卷基层,中间几个inception结构,后面AveragePool,全连接再加一个SOFTmax。结构图太大了,就不贴出来了。又发现一篇博客:(http://blog.csdn.net/a1154761720/article/details/53411365),有助于理解1×1的卷结核和全连接层的区别。1*1的卷积核即可以看作是层内卷积,又可以看作是层间卷积;可以通过控制卷积核的个数来进行特征的降维或者升维(实际上就是可以控制下一层特征图的数量,哈哈,low不low),别小看这个作用,它相比于n*n的卷积核可以大幅度的减少参数的数量,当然要牺牲精度,所以一般都是部分用1×1代替。

这里写图片描述
inceptionA 结构
inceptionA结构中,网络月到后面,特征越来越抽象,每个特征所涉及的感受野也更大。因此随着层数的增加,3×3和5×5卷积的比例也增加。但是,使用5×5的卷积仍然会带来巨大的计算量,必须采用1×1的卷积核进行降维,即使如下的inceptionB。
这里写图片描述
改进的inceptionB结构
降维思路如下:现比如要对n×n×500的图像进行5×5的卷积,生成M×M×250的图像,直接卷积的参数要求为5×5×500×250=3125000,现先对其用1×1卷积,生成N×N×100的图像,在进行5×5卷积,需要的参数为500×100+5×5×100×250=675000,即可大幅减少参数。

VGGNet

VGGNet模型与AlexNet模型类似,就是使用了更多的层,此外,VGGNet采用的都是同样大小的filter(3×3),stride=1,pad=1,具有如下特点:
  • 两个3×3的卷基层就是5×5,三个就是7×7,可以代替更大的filter尺寸。
  • 多个3×3的卷基层具有更少的参数。

P151页的VGGNet single-scale对比得出的结论:

  1. LRN(局部相应归一化)的作用效果并不大。
  2. 网络越深越好。
  3. 增加1×1的filter,可以增加额外的非线性提升效果。
  4. 3×3的filter效果比1×1的效果好。(但是参数多啊)

Siamese:

原理是利用神经网络提取描述算子,得到特征向量,然后利用两个图片的特征向量判断相似度。
siamese network的官方教程:http://caffe.berkeleyvision.org/gathered/examples/siamese.html
最后训练结果的可视化显示,上述教程的做后一句。
siamese 的网络结构图:是用drainnet.py画出来的,实现如下,先切换到caffe根目录下的python文件夹里面,然后输入语句:python draw_net.py ../examples/siamese/mnist_siamese_train_test.prototxt mnist_siamese_train_test.png
这里写图片描述

SqueezeNet

中文为压缩模型,它的研究目的是如何在保证精度的情况下,对网络参数进行压缩。
方法主要有三个:

  1. 用1×1的卷积核替换3×3的卷积核,可以极大的减少参数量,但是为了保证精度知做了部分替换。
  2. 减少输入3×3卷集的输入特征数量。将卷基层分解成squeeze层和expand层,并封装成一个Fire Module。Fire Module的结构图稍后上传。
  3. 在整个网络后期进行下采样,使得卷基层有较大的activation maps(这个在书中没有提及,应该是书中的:最后一层用AveragePooling层替换全连接层,使参数大量减少)。
    网络结构图

FCN模型

Full Convolutional Network经典的卷及网络中尺寸输入必须统一,FCN作者意识到这个限制主要是因为网络后面的全连接层引起的,作者用FCN代替全连接层解决这一问题。目前我感觉这是将全连接层替换成卷基层的最大的好处。

论文《Fully Convolutional Network for Semantic Segmentation》 全卷积网络用于语义分割。FCN开创了一个新的图像分割方向,对计算机视觉领域的影响是十分巨大的。FCN能够能够端到端(end to end)地得到每个像素的预测结果,目前也涌现了大批的基于FCN的算法。

相比于传统的卷积网络算法,FCN不仅能识别出该图像中含有哪种类别的物体,而且还能画出该物体的大致轮廓。(这就屌了)

FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map(称为heatmap,可能有n多张)进行上采样, 使它恢复到输入图像相同的尺寸(每个heatmap产生一张),从而可以对每个像素都产生了一个预测(这里有一个小trick,就是最后通过逐个像素地求其在n张图像该像素位置的最大数值描述(概率)作为该像素的分类), 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。

有一篇算是比较经典的文章把:http://www.cnblogs.com/gujianhan/p/6030639.html

R-CNN模型

步骤:

  1. 对图片生成建议框并根据IoU进行打分
  2. 用imageNet ILSVRC 2012 训练AlexNet网络
  3. 修改alexnet网络,去掉分类层,直接输出21维的向量,并用第一步的建议框进行训练。
  4. 针对每一类训练一个二分类的SVM
  5. 测试:将图片用select search 生成建议框,输入到卷积网络转化成向量的形式,再输入到对应的SVM中进行打分,将分数从大到小进行排列,利用 NMS(non maximum suppression)中文名非极大值抑制删除掉多余的建议框,剩余的就是检测的结果。

模型优点

该模型是第一个提出用cnn来进行特征提取思想的,以前都是人工或者用老套的方法进行提取(我对此并没有什么研究,只是转述)

模型的缺点

一句话,太麻烦了呀,要训练两次网络,还有要训练svm。在提取出向量后还要先保存再硬盘中,在输入另一个网络中。
svm中分类和bound regression是分开进行的,这样同样会耗费大量精力

spp(spatial pyramid pooling)空间金字塔池化:

CNN网络需要固定尺寸的图像输入,SPPNet将任意大小的图像池化生成固定长度的图像表示,提升R-CNN检测的速度24-102倍。事实上,CNN的卷积层不需要固定尺寸的图像,全连接层是需要固定大小输入的,因此提出了SPP层放到卷积层的后面,改进后的网络如下图所示:这里写图片描述

spp过程:
这里写图片描述
上图是一个spp的简图,上图将卷积后的特征图池化为一个21(16+4+1)维的向量,进行三种尺度的池化,第一种是将特征图分为4*4的区域,然后对每个区域进行最大池化得到一个16维的特征向量;中间和后面的步骤一样,分别得到4维和1维的特征向量,将三个合并之后得到一个21维的特征向量,将该向量作为后面全链接层的输入。

spp用来优化rcnn的思路

使用SPP进行检测,先用提候选proposals方法(selective search)选出候选框,

不过不像RCNN把每个候选区域给深度网络提特征,而是整张图提一次特征,再把候选框映射到conv5上,

因为候选框的大小尺度不同,映射到conv5后仍不同,所以需要再通过SPP层提取到相同维度的特征,再进行分类和回归,后面的思路和方法与RCNN一致。

映射思路:

在卷积层通过利用pad可以保证卷积前后的特征图size不变,特征图改变只是发生在pool层,且每次都是变为原来的一半,所以映射关系就变得比较简单,直接在原图上除以倍数就可以。

由于采集的建议框可以用两个点(左上和右下)来表示,只要找到这两个点在最终特征图的对应的位置就可以找到建议框对应的位置,然后再利用spp将其转换成固定长度的特征向量,再输入全链接层进行计算。

优点:
还是利用selece search提取特征图,但不用每个特征图都提取一次特征向量,而是只需要提取一次全图特征图,然后将特征图对应到上面,然后用spp。大大简化了运算
缺点:

  • 除了这个其他和rcnn缺点一样,还是太麻烦。
  • 在微调阶段谈及SPP-net只能更新FC层,这是因为卷积特征是线下计算的,从而无法再微调阶段反向传播误差

fast -rcnn模型

改进:

  1. 比R-CNN更高的检测质量(mAP);
  2. 把多个任务的损失函数写到一起,实现单级的训练过程;
  3. 在训练时可更新所有的层;
  4. 不需要在磁盘中存储特征。

与之前的不同:

  • 之前cpp是多个尺度的划分(如:16+4+1为三个尺度),现在只用一个尺度,但同样也可以达到获取固定维度向量的效果(参考资料猜测是因为要用预训练模型的缘故,多层的话需要重新训练)
  • 之后获得的特征向量继续经过两个全连接层(FC)得到特征向量。特征向量经由各自的FC层,得到两个输出向量:第一个是分类,使用softmax,第二个是每一类的bounding box回归。这样就不用将中间数据放到硬盘了。

FRCN大致就是一个joint training版本的SPP-Net,joint training翻译为联合训练。个人猜测意思就是将数据整合到一个网络中(select search并没有整合,只是相对rcnn整合了好多)进行训练。

为什么fast rcnn可以实现训练所有的网络层,而spp只能训练fc。各采用了什么方法?

RoI-centric sampling:从所有图片的所有RoI中均匀取样,这样每个SGD的mini-batch中包含了不同图像中的样本。(SPPnet采用)
FRCN想要解决微调的限制,就要反向传播到spp层之前的层->(reason)反向传播需要计算每一个RoI感受野的卷积层,通常会覆盖整个图像,如果一个一个用RoI-centric sampling的话就又慢又耗内存。

image-centric sampling:(solution)mini-batch采用层次取样,先对图像取样,再对RoI取样,同一图像的RoI共享计算和内存。 另外,FRCN在一次微调中联合优化softmax分类器和bbox回归。
看似一步,实际包含了:
多任务损失(multi-task loss)、小批量取样(mini-batch sampling)、RoI pooling层的反向传播(backpropagation through RoI pooling layers)、SGD超参数(SGD hyperparameters)
这里写图片描述

faster crnn模型

这次终于把所有的步骤都统一到一个网络中了。
这里写图片描述

faster rcnn的最主要贡献是提出了RPN(region proposal network区域建议网络),可以看成是RPN+fast rcnn。

着重解决了这个系统中的三个问题:
1. 如何设计区域生成网络
2. 如何训练区域生成网络
3. 如何让区域生成网络和fast RCNN网络共享特征提取网络

原创粉丝点击