tensorflow提取VGG特征 - weixin_38208741的博客 - CSDN博客

标签: | 发表时间:2018-10-12 15:34 | 作者:
出处:https://blog.csdn.net

vgg-16一种深度卷积神经网络模型,16表示其深度。模型可以达到92.7%的测试准确度。它的数据集包括1400万张图像,1000个类别。 

一个简单的演示,提取VGG的pool5层特征,存储为.mat文件
[python] view plain copy
  1.     import scipy.io as sio  
  2.    from scipy.misc import imread, imresize  
  3.   
  4.    sess = tf.Session()  
  5.     imgs = tf.placeholder(tf.float32, [None, 224, 224, 3])  
  6.     vgg = vgg16(imgs, '/aa/data/vgg16_weights.npz', sess)  
  7.   
  8.     img1 = imread('/aa/data/laska.png', mode='RGB')  
  9.     img1 = imresize(img1, (224, 224))  
  10.     path = '/aa/data/AllSample/'  
  11.   
  12.     for i in range(1,211):  
  13.         img = imread(path+str(i)+'.jpg',mode='RGB')  
  14.         print(path+str(i)+'.jpg')  
  15.         img = imresize(img, (224, 224))  
  16.       
  17.         feature = sess.run(vgg.pool5, feed_dict={vgg.imgs: [img]})  
  18.         feature = np.reshape(feature,[7,7,512])  
  19.         dic = {'features':feature}  
  20.         sio.savemat('/aa/data/features/'+str(i)+'.mat',dic)  
  21.       
  22. #     features = feature.eval(session=sess)  
  23. #     features = np.reshape(features,[7,7,512])  
  24.      


在我们的实际项目中,一般不会直接从第一层直接开始训练,而是通过在大的数据集上(如ImageNet)训练好的模型,把前面那些层的参数固定,在运用到我们新的问题上,修改最后一到两层,用自己的数据去微调(finetuning),一般效果也很好。

所谓finetuning,就是说我们针对某相似任务已经训练好的模型,比如CaffeNet, VGG-16, ResNet等, 再通过自己的数据集进行权重更新, 如果数据量比较小,可以只更新最后一层,其他层的权重不变,如果数据量中等,可以训练后面几层,如果数据量很大,那OK,直接从头训练,只不过在训练时间上,需要花费比较多。

在网络训练好之后,只需要forward过程就能做预测,当然,我们也可以直接把这个网络当成一个feature extractor来用,可以直接用任何一层的输出作为特征,根据R-CNN论文对Alexnet的实验结果,如果不做fine-tuning,pool5和fc6和fc7的特征效果并没有很强的提升,所以,如果直接用作feature extractor,直接用pool的最后一层输出就OK。


vgg-16一种深度卷积神经网络模型,16表示其深度。模型可以达到92.7%的测试准确度。它的数据集包括1400万张图像,1000个类别。

TensorFlow VGG-16 预训练模型

https://github.com/ry/tensorflow-vgg16

vgg-16是我最喜欢运行的图像分类的模型,因为它的简单性和准确性。这种模型的创造者发表了可用于Caffe的预先训练二进制。

https://gist.github.com/ksimonyan/211839e770f7b538e2d8#file-readme-md

MD5 (VGG_ILSVRC_16_layers.caffemodel) = 441315b0ff6932dbfde97731be7ca852

这是将特定的文件转换到一个tensorflow模型并检查其正确性。

运行make下载原始的caffe模型并转换。tf_forword.py里有一个怎样使用产生的vgg16.tfmodel的例子。如果你不想按照caffe,你可以从这下载输出 https://github.com/ry/tensorflow-vgg16/raw/master/vgg16-20160129.tfmodel.torrent

TF模型的输入(“image”)应该是[批次,高度,宽度,通道],其中高度=宽度=224,通道=3.值应该在0到1之间。

输出(“prob”)是一个1000维的类概率向量,这个向量的索引对应syset.txt里的行号。

https://github.com/leihe001/tensorflow-vgg

这是个基于 tensorflow-vgg16Caffe to TensorFlow的VGG16和VGG19的一个TensorFlow的实现。

我们修改了tensorflow-vgg16的实现使用numpy加载取代默认的tensorflow加载,目的是加速初始化和减少总的内存使用量。此实现允许进一步修改网络,例如移除FC层,或者增加批大小。

为了使用VGG网络,需要下载 VGG16 NPYVGG19的npy文件。

## 使用 使用这个编译VGG工程

vgg = vgg19.Vgg19()
vgg.build(images)

或者

vgg = vgg16.Vgg16()
vgg.build(images)

图像是一个维度是[None,224,224,3]的张量。

张量可以是一个占位,一个变量甚至是一个常量。

所有的VGG层(张量)可以通过vgg对象访问。例如,vgg.conv1_1, vgg.conv1_2, vgg.pool5, vgg.prob, ...test_vgg16.py and test_vgg19.py包含样例的使用。

##额外 在我的另一个tensorflow图像风格合成项目中使用了这个库: stylenet

##更新 添加一个可训练的VGG19版本vgg19_trainable.支持从现有的变量或从开始训练。(但是不包括训练器)

test_vgg19_trainabel里添加了一个简单的测试。switch里有如何训练,关闭训练模型进行验证,以及如何保存的例子。

我添加了一个单独的文件(不是修改现有的),因为我想保持原始VGG网络的简单性。

相关 [tensorflow vgg 特征] 推荐:

tensorflow提取VGG特征 - weixin_38208741的博客 - CSDN博客

- -
vgg-16一种深度卷积神经网络模型,16表示其深度. 模型可以达到92.7%的测试准确度. 它的数据集包括1400万张图像,1000个类别. 一个简单的演示,提取VGG的pool5层特征,存储为.mat文件. 在我们的实际项目中,一般不会直接从第一层直接开始训练,而是通过在大的数据集上(如ImageNet)训练好的模型,把前面那些层的参数固定,在运用到我们新的问题上,修改最后一到两层,用自己的数据去微调(finetuning),一般效果也很好.

ResNet, AlexNet, VGG, Inception: 理解各种各样的CNN架构

- -
欢迎交流与转载,文章会同步发布在公众号:机器学习算法全栈工程师(Jeemy110). 卷积神经网络在视觉识别任务上的表现令人称奇. 好的CNN网络是带有上百万参数和许多隐含层的“庞然怪物”. 事实上,一个不好的经验规则是:网络越深,效果越好. AlexNet,VGG,Inception和ResNet是最近一些流行的CNN网络.

TensorFlow-dev-summit:那些 TensorFlow 上好玩的和黑科技

- - IT瘾-dev
本文属于介绍性文章,其中会介绍许多TensorFlow的新feature和summit上介绍的一些有意思的案例,文章比较长,可能会花费30分钟到一个小时. Google于2017年2月16日(北京时间)凌晨2点在美国加利福尼亚州山景城举办了首届TensorFlow开发者峰会. Google现场宣布全球领先的深度学习开源框架TensorFlow正式对外发布V1.0版本,并保证Google的本次发布版本的API接口满足生产环境稳定性要求.

TensorFlow、MXNet、PaddlePaddle 三个开源库对比

- - IT瘾-dev
【转载请注明出处】 chenrudan.github.io. 从深度学习开始流行,到深度学习框架的迭代,到各类实际应用的出现,不过短短几年时间. 其实发展到现在,各个框架对自己的定位都不相同,硬要说哪个框架最好没什么必要,结合自身需求找到合适的用就够了(实验室的服务器不太方便拿来折腾,本文就不比较运算速度了,可以参考[4][5]).

深度学习利器:TensorFlow实战

- - 孟飞阳的博客
深度学习及TensorFlow简介. 深度学习目前已经被应用到图像识别,语音识别,自然语言处理,机器翻译等场景并取得了很好的行业应用效果. 至今已有数种深度学习框架,如TensorFlow、Caffe、Theano、Torch、MXNet,这些框架都能够支持深度神经网络、卷积神经网络、深度信念网络和递归神经网络等模型.

如何将TensorFlow用作计算框架

- - 神刀安全网
摘要:如果你刚刚接触TensorFlow并想使用其来作为计算框架,那么本文是你的一个很好的选择,阅读它相信会对你有所帮助. Tensorflow可能是最受欢迎,增长最快的机器学习框架. 在 Github拥有超过70000个点赞,并得到Google的支持,不仅拥有比 Linux更多的点赞,还拥有大量的资源.

TensorFlow自动识别验证码(二)

- -
在 使用tensorflow自动识别验证码(一) 这篇文章中,对使用tensorflow自动识别验证码的过程做了简单的了解和编写. 那么今天这篇文章将对上篇文章中代码进行修改用于实现对主流的CMS进行验证码的破解. 先回顾一下 tensorflow 的自动识别验证码的步骤. 由于后面三步基本都是tensorflow自动完成.

[转]Tensorflow实现的CNN文本分类

- - Soul Joy Hub
在这篇文章中,我们将实现一个类似于Kim Yoon的卷积神经网络语句分类的模型. 本文提出的模型在一系列文本分类任务(如情感分析)中实现了良好的分类性能,并已成为新的文本分类架构的标准基准. 本文假设你已经熟悉了应用于NLP的卷积神经网络的基础知识. 如果没有,建议先阅读Understanding Convolutional Neural Networks for NLP 以获得必要的背景.

[原]Tensorflow中采用的量化方案

- - Mingyong_Zhuang的技术博客
Tensorflow中采用的量化方案. 本文根据google发表在cvpr2018上的量化文章《Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference》讲解量化过程,该过程同时也是谷歌的Tensorflow Lite中使用的量化方法.

Google 人工智能系统 TensorFlow 开源背后

- - TECH2IPO
Google 周一发布人工智能系统 TensorFlow 并宣布开源,TensorFlow 是 Google 耗费心血开发出了第二代人工智能系统,Google 此举并不像表面看来那么简单. 尽管 Google 宣布 TensorFlow 开源,人人皆可使用,但是 Google 掌握着使其成功的大部分因素:大数据、运行软件的高性能的计算机网络和强大的人工智能专家团队.