keras提供了VGG19在ImageNet上的预训练权重模型文件,其他可用的模型还有VGG16、Xception、ResNet50、InceptionV3 4个。

VGG19在keras中的定义:

def VGG19(include_top=True, weights='imagenet',
input_tensor=None, input_shape=None,
pooling=None,
classes=1000)
  1. include_top: 是否包含最后的3个全连接层

  2. weights: 定义为‘imagenet’,表示加载在imagenet数据库上训练的预训练权重,定义为None则不加载权重,参数随机初始化

包含最后3个全连接层的VGG19模型下载地址:  https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg19_weights_tf_dim_ordering_tf_kernels.h5

不包含最后3个全连接层的VGG19模型下载地址: https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg19_weights_tf_dim_ordering_tf_kernels_notop.h5

不包含全连接层的VGG19模型文件名称是" vgg19_weights_tf_dim_ordering_tf_kernels_notop.h5 " ,文件大小约80MB;

包含全连接层的VGG19模型文件名称是 " vgg19_weights_tf_dim_ordering_tf_kernels.h5 " ,文件大小约575MB

ubuntu中,下载的VGG19模型文件的本地路径是 ~/.keras/models/ , .keras是一个隐藏文件夹。可以预先下载模型文件放到对应目录下,程序执行时检测到存在模型文件就不会再下载了。

使用VGG19预训练模型分类图片的例子

# coding: utf-8
from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
import numpy as np base_model = VGG19(weights='imagenet', include_top=True)
img_path = 'cat.jpg'
img = image.load_img(img_path, target_size=(224, 224)) # 加载图像,归一化大小
x = image.img_to_array(img) # 序列化
x = np.expand_dims(x, axis=0) # 展开
x = preprocess_input(x) # 预处理到0~1
out = base_model.predict(x) # 预测结果,1000维的向量
print(out.shape) # (1,1000)

程序首先加载带3个全连接层的VGG19模型,然后读入图片并做格式转换和归一化等处理后执行VGG模型预测,预测结果out是一个1000维的向量,代表了预测结果分别属于10000个分类的概率,形状是(1,1000),out内容如下:

使用VGG19预训练模型提取VGG19网络中任意层的输出特征的例子

上个例子可以看到keras对VGG网络的封装异常好,简单几行代码就可以分类图片。keras中VGG预训练参数模型另一个更常用的应用是可以提取VGG网络中任意一层的特征。

以下例子提取的是VGG19网络中第5个卷积层的输出特征(也是第1个全连接层的输入特征)

# coding: utf-8
from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
import numpy as np base_model = VGG19(weights='imagenet', include_top=False)
model = Model(inputs=base_model.input, outputs=base_model.get_layer('block5_pool').output)
img_path = 'cat.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
block5_pool_features = model.predict(x)
print(block5_pool_features.shape) #(1, 7, 7, 512)

base_model.get_layer('block5_pool')中的block5_pool参数定义了获取的是第5个卷积层的输出。第5层的输出是一个 1×7×7×512的向量,如下:

也可以设置为加载最后3个全连接层的VGG19网络,就可以获取最后3个全连接层的输出了:

# coding: utf-8
from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
import numpy as np
base_model = VGG19(weights='imagenet', include_top=True)
model = Model(inputs=base_model.input, outputs=base_model.get_layer('fc2').output)
img_path = 'cat.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
fc2 = model.predict(x)
print(fc2.shape) #(1, 4096)

加了全连接层,所以base_model.get_layer('fc2') 里参数也可以是 flatten、fc1、fc2和predictions 。

VGG19各个模块在keras中定义的名称如下,可以根据名称轻松获取该层特征:

最新文章

  1. Sql Server系列:流程控制语句
  2. 搭建SpringMVC+MyBatis开发框架二
  3. 用viewpager实现图片轮播
  4. TXT四则运算计算器 后日谈
  5. JavaEE Tutorials (11) - 使用Criteria API创建查询
  6. Java解决TopK问题(使用集合和直接实现)
  7. 开涛spring3(3.1) - DI的配置使用
  8. Python中wx.FlexGridSizer
  9. redis远程连接问题(安全模式问题)
  10. sqlserver 以年月日为条件查询记录
  11. ScalaPB(0): 找寻合适的内部系统微服务集成工具
  12. OpenCASCADE Texture Mapping
  13. c提高第四次作业
  14. java 通过jmx获取active mq队列消息
  15. kubernetes 基本命令
  16. 原来bug解决了,是这样的感觉
  17. 2017-5-19&5-23/系统性能指标
  18. RESTful记录-RESTful服务
  19. 支持xhr浏览器:超时设定、加载事件、进度事件
  20. Android利用温度传感器实现带动画效果的电子温度计

热门文章

  1. Win10问题
  2. Linux Time_wait网络状态 调优
  3. win10虚拟桌面使用方法-提高工作效率
  4. CEF 设置Cookie
  5. 微信小程序wepy开发,属性绑定的事件参数中可以使用{{}}写实参
  6. 自己封装myLocalStorage,使其有有效期
  7. 三 drf 认证,权限,限流,过滤,排序,分页,异常处理,接口文档,集xadmin的使用
  8. java jdk动态代理学习记录
  9. 由装饰者模式来深入理解Java I/O整体框架
  10. [easyUI] datagrid 数据格 可以进行分页