MatConvNet提取FCN深度特征

  文中程序和深层次提取细节请点击https://github.com/DUTFangXiang/ExtractFCNFeature了解。

一、背景

  当前计算机视觉方向,随着深度学习方法的发展与成熟,CNN已经在各大计算机视觉应用中取得优异的表现,尤其以检测,分类,分割,识别中最为突出。但是重新设计和训练一个深度网络是一个复杂的工作,所以有一批研究者采取另类的一种方法,也就是从当前已有网络中提取前卷积网络作为图片的特征,来替代传统手工诸如RGB颜色,HOG,纹理,亮度等特征,然后应用传统无监督或者有监督学习方法结合深度特征(Deep CNN features)做更深入的研究。例如ECCV2016上做显著性目标检测的文章《Kernelized Subspace Ranking for Saliency Detection》就是利用的这个思想,文中提取的是RCN特征来表示每个候选目标。
  提取深度特征的CNN网络无需重新学习,我们仅需在已训练好CNN网络中提取不同卷积层串联来当做图片特征即可。深度特征由于结合了fine层和coarse层特征信息,可以让模型做局部的预测,并且尊重图片的全局结构。经过试验发现,相比较传统手工特征,深度特征应用在相同模型上能够取得了更好的最终效果。

二、MatConvNet

  MatConvNet是Matlab工具包,可以为计算机视觉应用完成Convolutional Neural Networks (CNNs) 。它能够让你在Matlab中简单高效地完成现有CNNs网络执行和学习。现在该工具包已兼容许多已训练好的图像分类,分割,人脸识别和文字检测等CNNs网络。更加详细的说明请查阅MatConvNet官网http://www.vlfeat.org/matconvnet/

二、FCN

  通常CNN网络在卷积层之后会接上若干个全连接层, 将卷积层产生的特征图(feature map)映射成一个固定长度的特征向量。传统的基于CNN的分割方法:为了对一个像素分类,使用该像素周围的一个图像块作为CNN的输入用于训练和预测。这种方法有几个缺点:一是存储开销很大。例如对每个像素使用的图像块的大小为15x15,然后不断滑动窗口,每次滑动的窗口给CNN进行判别分类,因此则所需的存储空间根据滑动窗口的次数和大小急剧上升。二是计算效率低下。相邻的像素块基本上是重复的,针对每个像素块逐个计算卷积,这种计算也有很大程度上的重复。三是像素块大小的限制了感知区域的大小。通常像素块的大小比整幅图像的大小小很多,只能提取一些局部的特征,从而导致分类的性能受到限制。
  而全卷积网络(FCN)则是从抽象的特征中恢复出每个像素所属的类别,即从图像级别的分类进一步延伸到像素级别的分类。FCN没有对输入一整张图像做任何预处理操作,整个过程是将一整张图片送入到网络中端到端训练。
  FCN网络第一次被Jonathan Long等人在Fully Convolutional Networks for Semantic Segmentation文章中提出,发表于2015年CVPR会议上。网络结构如下图:


这里写图片描述

三、FCN深度特征提取

  FCN包含16层,为了获取局部到全局的特征表示,当一张图片送入到FCN中,我们融合fine层的pool1以及coarse层的pool5作为图片的特征。这样串联的特征就可以让后面的模型能够做局部的预测,同时能够遵守全局的结构。
  本人改版的程序请在https://github.com/DUTFangXiang/ExtractFCNFeature中下载,文件主要包含如下两个部分:


这里写图片描述

  其中Extract_FCN_features文件夹中放置的是利用MatConvNet软件包提取特征的Matlab程序。当然,首先你需要下载已训练好的FCN网络,请在http://www.vlfeat.org/matconvnet/pretrained/网站下载pascal-fcn8s-dag.mat文件(下载地址是:http://www.vlfeat.org/matconvnet/models/beta18/,官网好像这个mat文件有变化,用最新的无法获得,老版mat是这个地址中获取。),原深度网络是在语义分割库上训练,但是提取的特征适用于大多数计算机视觉应用。然后在Extract_FCN_features文件夹中创建一个FCN文件夹,将下载好的mat文件放置在FCN文件夹中。
  接着打开main.m程序,修改下面的图像库的文件路径imaFile就可以了,程序中默认图片格式是bmp,如果是其他格式请自行修改。

这里写图片描述

  当然,你也可以保存其他层特征,程序中第6和32对应的是原网络中pool1和pool5层。整个网络输出的结果,你可以在最后通过输出结果对应到原网络大小,从而保存其他层的图片特征结果。
  另外一个Use_FCN_Feature文件夹是提取保存的特征,并且将其复原到原图像大小。由于图片提取的特征边缘存在零填充成分,所以在最后特征数组中需要先将其剔除再复原到原图像大小。如下图,是经试验得出的每一层零填充成分的长度。

这里写图片描述

  当然,整个过程已经完成,你只需要对应哪一层网络就行,程序自动会剔除然后复原到原图像大小。程序中还包含了将最终像素特征取均值映射到对应超像素的程序,如果有超像素特征提取需求的请在对应部分去除注释即可。


  个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

  转载请注明出处:http://blog.csdn.net/fx677588/article/details/70159793#reply


  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 31
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值