今天给大家带来的是VGG16深度网络的解析,虽然VGG比较出名的还有VGG19深度网络,但是本文只对VGG16网络做一下解析,至于其他变种,稍微修改一下网络层数和参数即可实现,如果这个系列比较复杂的VGG16网络可以自己搭建出来,那么其他的变种也肯定没问题。
代码git地址:vgg/pytorch · 小四/xs-dl - 码云 - 开源中国 (gitee.com)
1 VGG网络结构
论文地址:1409.1556.pdf (arxiv.org)
VGG算法团队研究了卷积网络深度在大规模的图像识别环境下对准确性的影响。其主要贡献是使用非常小的(3×3)卷积滤波器架构对网络深度的增加进行了全面评估,这表明通过将深度推到16-19加权层可以实现对现有技术配置的显著改进。也正是因为这些改进,使得VGG算法团队在定位和分类过程中分别获得了第一名和第二名。如图可以看到VGG16包含13个卷积层和三个全连接层,VGG19包含16个卷积层和三个全连接层。接下来我们会详细的剖析整个网络的搭建过程。
2 VGG16网络参数
上图的参数是根据
原论文的数据和源代码中的参数反推出来的,大部分参数直接根据原论文的网络图即可获得,其中其他参数的计算可以参照我另个一篇博文:CV(计算机视觉)领域四大类之图像分类一(AlexNet) - 知乎 (zhihu.com),里边有详细的参数计算过程。
3 pytarch实现
(1)数据准备make_data.py(花分类数据集)
import os
from PIL import Image
# 下载数据集地址(手动下载解压即可)
DATA_URL = 'http://download.tensorflow.org/example_images/flower_photos.tgz'
# 解压数据集的路径(自己定义即可)
flower_photos = "G:\\alexnet\\flower_photos\\"
# 训练数据路径(自己定义即可)
base_url = "G:\\alexnet\\train_data\\"
for item in os.listdir(flower_photos):
path_temp = flower_photos + item
n = 0
for name in os.listdir(path_temp):
n += 1
img = Image.open(path_temp + "\\" + name)
# 转换通道
img = img.convert("RGB")
# 验证集(20%验证集,80%数据集,可自行调节)
if n % 8 == 0:
i