VGG

VGG

背景介绍

  VGG:来源于牛津大学视觉几何组Visual Geometry Group,故简称VGG,是2014年ILSVRC竞赛的第二名,是一个很好的图像特征提取模型。

VGG

VGG特点

  卷积核:VGG全由3x3小卷积核构成,步长为1,填充方式为same
  池化核:VGG全由2x2池化核构成,步长为2
  网络层:VGG具有较深的网络层,可以根据需要进行调整
  参数量:VGG具有较大参数量,主要来源于Flatten层后面的全连接层

不同尺寸VGG网络结构

VGG

VGG16图像分析

VGG

TensorFlow2.0实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from functools import reduce
import tensorflow.keras as keras


def compose(*funcs):
if funcs:
return reduce(lambda f, g: lambda *a, **kw: g(f(*a, **kw)), funcs)
else:
raise ValueError('Composition of empty sequence not supported.')


def conv_block(x, filters, times, name):
for i in range(times):
x = keras.layers.Conv2D(filters, (3, 3), (1, 1), 'same', activation='relu', name='conv{}_{}'.format(name, i + 1))(x)
x = keras.layers.MaxPool2D((2, 2), (2, 2), name='maxpool{}'.format(name))(x)

return x


def vgg16(input_shape):
input_tensor = keras.layers.Input(input_shape, name='input')
x = input_tensor
times = [2, 2, 3, 3, 5]
filters = [64, 128, 256, 512, 512]
for i in range(len(times)):
x = conv_block(x, filters[i], times[i], i + 1)
x = compose(keras.layers.Flatten(name='flatten'),
keras.layers.Dense(4096, activation='relu', name='dense1'),
keras.layers.Dense(4096, activation='relu', name='dense2'),
keras.layers.Dense(1000, activation='softmax', name='dense3'))(x)

model = keras.Model(input_tensor, x, name='VGG16')

return model


if __name__ == '__main__':
model = vgg16(input_shape=(224, 224, 3))
model.build(input_shape=(None, 224, 224, 3))
model.summary()

VGG

VGG小结

  VGG是最简单的一种深度学习网络,也是一种非常有效的特征提取模型。从上图可以看出VGG16模型的参数量达到143M,因为特征提取时不需要后面的Dense层,可以大大降低网络的规模。因此实际任务所使用,如目标检测算法SSD的特征提取网络就是VGG

-------------本文结束感谢您的阅读-------------
0%