> 文章列表 > VGG网络简介

VGG网络简介

VGG网络简介

1. 背景

VGG是常见的用于大型图片识别的极深度卷积网络

这里主要介绍VGG网络预测在ImageNet数据集上的训练及预测。

2. ImageNet图像数据集简介

        ImageNet包含了145W张224*224像素的三通道彩色图像数据集,图像划分为1000个种类。其中训练集130W张,验证集5W张,测试集10W。

数据加载及预处理:
 

2.1

3. 使用keras自带的VGG16网络

        keras中模型都是预训练好的,其权重存储在~/.keras/models/中,模型初始化时权重会自动下载。

from keras.optimizers import SGD
from keras.applications.vgg16 import VGG16
import matplotlib.pyplot as plt
import numpy as np
import cv2model = VGG16(weights='imagenet', include_top=True)
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd)im = cv2.resize(cv2.imread('tain.png'), (224, 224))
im = np.expand_dims(im, axis=0)
out = model.predict(im)
plt.plot(out.ravel())
plt.show()
print(np.argmax(out))
# 820 蒸汽火车

4. 从深度学习模型特定网络层中提取特征

4.1 为什么从DCNN的中间网络层提取特征?

1. 网络的每一层都在学习识别对最终分类必要的那些特征

2. 低级的网络层识别的是类似颜色和边界这样的顺序特征;

3. 高级的网络层则是把低层的这些顺序特征组合成更高的顺序特征,如形状或者物体等;

因此,中间的网络层才有能力从图像中提取出重要的特征,这些特征有可能对不同的分类有益。

4.2 特征提取的益处?

1. 可以依赖大型的公开可用的训练并把学习转换到新的领域;

2. 可以为大型的耗时训练节省时间;

3. 即使该领域没有足够多的训练样例,也可以提供出合理的解决方案(有了一个良好的初始网络模型)。

4.3 从VGG-16网络特定网络层中进行特征提取

from keras.models import Model
from keras.preprocessing import image
from keras.applications.vgg16 import VGG16, preprocess_input
from keras.optimizers import SGD
import numpy as np
import cv2# 加载预训练好的VGG16模型
base_model = VGG16(weights='imagenet', include_top=True)
for i, layer in enumerate(base_model.layers):print(i, layer.name, layer.output_shape)