首先贴出三个链接:

1. VGG网络结构详解视频

2. 使用pytorch搭建VGG并训练

3. 使用tensorflow搭建VGG并训练

VGG网络是在2014年由牛津大学著名研究组VGG (Visual Geometry Group) 提出,斩获该年ImageNet竞赛中 Localization Task (定位任务) 第一名 和 Classification Task (分类任务) 第二名。原论文名称是《Very Deep Convolutional Networks For Large-Scale Image Recognition》,在原论文中给出了一系列VGG模型的配置,下面这幅图是VGG16模型的结构简图。

该网络中的亮点: 通过堆叠多个3x3的卷积层来替代大尺度卷积层(在拥有相同感受野的前提下能够减少所需参数)。

论文中提到,可以通过堆叠两层3x3的卷积层替代一层5x5的卷积层,堆叠三层3x3的卷积层替代一层7x7的卷积层。下面给出一个示例:使用7x7卷积层所需参数,与堆叠三个3x3卷积层所需参数(假设输入输出特征矩阵深度channel都为C)

如果使用一层卷积层大小为7的卷积所需参数(第一个C代表输入特征矩阵的channel,第二个C代表卷积核的个数也就是输出特征矩阵的深度):

7\times 7\times C\times C=49C^{2}

如果使用三层卷积层大小为3的卷积所需参数:

3\times 3\times C\times C+3\times 3\times C\times C+3\times 3\times C\times C=27C^{2}

经过对比明显使用3层大小为3x3的卷积层比使用一层7x7的卷积层参数更少

下表是从原论文中截取的几种VGG模型的配置表,作者尝试了不同深度的配置(11层,13层,16层,19层),是否使用LRN(Local Response Normalization)以及1x1卷积层与3x3卷积层的差异。

表中的卷积层(conv3-kernels,其中kernels代表卷积核的个数)全部都是大小为3x3,步距为1,padding为1的卷积操作(经过卷积后不会改变特征矩阵的高和宽)。最大池化下采样层全部都是池化核大小为2,步距为2的池化操作,每次通过最大池化下采样后特征矩阵的高和宽都会缩减为原来的一半。我们通常使用的VGG模型是表格中的VGG16(D)配置。根据表格中的配置信息以及刚刚讲的卷积层和池化层的详细参数就能搭建出VGG网络了。

我们通常看到别人在搭建VGG网络时,图像预处理的第一步会将图像的RGB分量分别减去[123.68, 116.78, 103.94]这三个参数。这三个参数是对应着ImageNet分类数据集中所有图像的R、G、B三个通到的均值分量。如果你要使用别人在ImageNet数据集上训练好的模型参数进行fine-trian操作(也就是迁移学习)那么你需要在在图像预处理过程中减去这[123.68, 116.78, 103.94]三个分量,如果你是从头训练一个数据集(不使用在ImageNet上的预训练模型)那么就可以忽略这一步。

关于模型的搭建与训练代码放在我的github中,大家可自行下载使用:

GitHub - WZMIAOMIAO/deep-learning-for-image-processing: deep learning for image processing including classification and object-detection etc.

pytorch版本在pytorch_learning文件夹中,tensorflow版本在tensorflow_learning文件夹中.
 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐