笔记:VGG16网络原理与pytorch网络实现
在图像去雾、超分辨率、风格迁移等领域,感知损失被广泛使用。而感知损失采用较多的正是VGG16网路,后续虽然出现了残差网络ResNet、密集连接网络DenseNet、快速推理的MobileNet等,VGG16网络(及其变种VGG19等)仍然被研究人员普遍使用。
笔记将从以下3个方面对VGG16网络进行分析:
(1)网络结构分析与训练细节
(2)特点与贡献
(3)pytorch搭建
在这里,我推荐给你们这个深度学习框架原理实战训练营,3天就可以带你从零构建专家级神经网络框架,点击下方插件就可以免费报名哦 ↓ ↓ ↓
1、网络结构分析与训练细节
下面这张图给出了网络的输入输出以及特征图尺寸的变化情况(画的比较粗糙)。(1)左边输入图片的尺寸是224x224x3,然后经过Conv(卷积)和ReLU(激活)得到224x224x3的特征图,这个过程中图片尺寸没有变化,仅仅是通道数从3增加到64;(2)尺寸从224降为112是通过maxpooling实现的,选取kernel_size=2并且stride=2的pooling操作可以让长宽各降低一半;(3)网络的最后端是全连接层,全连接层最后输出1000维的目的是实现1000分类的效果:
下面的表格来自VGG16论文,给出了VGG11、VGG16与VGG19不同的网络搭建方式:
其中ABCDE表示不同深度的网络配置,convx-y中x表示卷积核尺寸,y表示特征通道数,比如conv3-256表示3x3的卷积核并且通道数为256;同理conv1-512表示卷积核3x3通道数为512。
本篇笔记主要分析的是VGG16不用1x1卷积的版本,也就是上述表格中的D。其特性包含下面几个方面:
(1)包含13个卷积层,每个卷积层都不会改变前一层的特征图长和宽;通过Conv可以实现通道数的增加(表格中maxpool放置的位置容易误导读者,让人误以为池化层负责增加通道数)。假设输入图片尺寸为(batch_size, 3, 224, 224),如果希望这一层的输出特征图尺寸为(batch_size, 64, 224, 224),需要使用64个尺寸为3x3并且3个通道的卷积核。
(2)包含5个池化层,分别分布在2或者3次卷积以后。池化层的作用是降低特征图尺寸并且能提高网络抗干扰能力。假设上一层得到的特征图尺寸为(batch_size, 64, 224, 224),选取Max Pooling的核尺寸为2x2,每次移动两个步长,那么得到的输出特征图尺寸为(batch_size, 64, 112, 112)。VGG16选取的是max pooling仅仅是各种池化方式中的一种,类似的池化还有均值池化等。
(3)包含3个全连接层,从现在