看懂vgg16

2024-04-16 05:18
文章标签 vgg16

本文主要是介绍看懂vgg16,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

刚开始接触深度学习、卷积神经网络的时候非常懵逼,不知道从何入手,我觉得应该有一个进阶的过程,也就是说,理应有一些基本概念作为奠基石,让你有底气去完全理解一个庞大的卷积神经网络:

本文思路:

一、我认为学习卷积神经网络必须知道的几个概念:

1、卷积过程:

  我们经常说卷积神经网络卷积神经网络,到底什么才是卷积?网络层卷积过程到底怎么实现?我们在这里借鉴了另一位博客大牛的动态图来给大家演示一下,

  图作者文章在此:http://blog.csdn.net/silence1214/article/details/11809947

我们可以看到,卷积过程其实还是基于一个固定的矩阵,在另外一个矩阵不断一格一格扫过去的到的数值的和,(注意:这里的一格一格非常重要,因为涉及后面的概念:步长→我们不妨想一想当固定矩阵不是一格一格前进的时候,会发生什么呢?)产生的一个新的矩阵,我们以作为比较会发现:粉红色矩阵和绿色矩阵在根本上有很大不一样,

第一,卷积之后的维数降低了;第二,我们要想想为什么降维了?(思考:降低维度到底有没有规律?)

  答案是有的:我们发现橙色的固定框为3*3,绿色是5*5,出来是三乘三;

  所以规律可以得到:粉红色最后的卷积结果矩阵维度=绿色矩阵维数-橙色矩阵维数+1

  (我们又应该思考:如果我不想最后减少维度,我只希望卷积,怎么办呢?)

2、两层之间的池化:

  我们依然延用博客大牛的另一个动图(再次点赞做的精细准确!)

我们可以发现其实跟之前没什么不一样:还是以三个矩阵之间的运算,但是我们很容易发现,它并不是一行一行扫过去的,橙色矩阵维度是黄色矩阵的整数倍,所以池化的最终的结论是要把原来的维度减少到1/n.这是池化最根本的原理(当然也有特殊情况。)

(思考点:我们想象一下如果一个19*19的矩阵做池化,会是一种什么样的体验呢?我们不可以缩小整数倍!!答案会在后面的VGG16里面讲清楚,不急不急吐舌头吐舌头吐舌头

 

3、第三个知识点是步长的概念:

  卷积核(后面讲到VGG16会介绍)移动的步长(stride)小于卷积核的边长(一般为正方行)时,变会出现卷积核与原始输入矩阵作用范围在区域上的重叠(overlap),卷积核移动的步长(stride)与卷积核的边长相一致时,不会出现重叠现象。

  通俗一点其实就是:刚刚说的那个粉红色矩阵,他每一次移动多少格,格子就是步长!!

4、卷积核:

  一个听起来很高大上的词语,我们依然用之前的基础来解释:通俗易懂:就是粉红色矩阵的个数!!因为有时候我们要提取的特征非常多非常广泛,所以需要我们用更多的矩阵来扫(多扫几遍),那么粉红色矩阵的个数就是卷积核个数。

5、Padding:

  这个应该是最抽象的概念了:但是也不会特别难呢,就是我们在之前讲到第一点:卷积的时候,我抛下了一个问题:

 (我们又应该思考:如果我不想最后减少维度,我只希望卷积,怎么办呢?)(现在知道括号的重要性了吧哈哈?骂人骂人骂人

  现在我们来解决这个问题:比如:我们需要做一个300*300的原始矩阵,用一个3*3卷积核(粉红色矩阵)来扫,扫出来,按照之前公式,结果的矩阵应该是:298*298的矩阵,但是这样很难计算,减得也不多,反而增加我计算难度,还不如池化(pooling)来得干脆是吧!那我们就在300*300矩阵外面周围加一圈“0”,记住,是在外面外包一层“0”

重点是:这样的300*300就变成了302*302的矩阵,这样就可以完全避开卷积后那两层的抵消。

6、还有一个就是通道的概念:这个不算知识点,仅仅是一个常识词语,比如一张图片,有RGB三种颜色,对应三个灰度级别,也就是三个通道了:

更加抽象的图可以参照下面的结构:

二、等待已久的VGG16:

VGG16分为16层,我们主要讲前面的前几层(越详细越好吧,后面是一样的)

——首先教会大家一个看其他神经网络也是用的办法:官方数据表格:

看懂一些式子表达:

Conv3-512   →    是512个3*3的卷积核;

好了,我们有了以上的知识可以考试剖析VGG16卷积神经网络了

 

三、利用之前的基本概念来解释深层的VGG16卷及网络;

【1、从INPUT到Conv_1:】

首先两个黄色的是卷积层,是VGG16网络结构十六层当中的第一层(Conv_1_1)和第二层(Conv_1_2),他们合称为Conv_1(我们以一个maxpool为界,将vgg16又分为5大层,方便后面叙述)

我们主要讲述第一个,也就是第一层(Conv_1),它怎么把一个300*300*3的矩阵变成一个300*300*64的矩阵?

我们假设蓝色框是一个RGB图像,橙色是一个3*3*3的卷积核,我们对一个三维的27个数求和,然后扫过去,按照第一部分算的得出来的是一维的298*298的矩阵(因为卷积核也是三维所以结果是一维);

然后回想一下什么是Padding、前面也讲过它的概念了;所以不了一圈的圆,回到了300*300*1;

然后,VGG16这一层安置有64个卷积核,那么,原来的300*300*1变成300*300*64

于是我们的到了想要的东西;最后的绿色框;

【1、从Conv_1到Conv_2之间的过度:】

这一步用的Pooling是:2*2*64 s=2;

也就是说,步长是二,滑动的矩阵本身没有重叠;刚好减半,第三维度64不变;

【3、顺利来到Conv_2并且结构完全一样进入Conv_3:】

我们知道原来INPUT是300*300*3过了第一层出来时150*150*64

那么第二层仍然有池化有128个卷积核,联想推理:

出来的应该是75*75*128;这一步没有问题,我们继续往下分析:

【4、进入Conv_3的推演:】

可以知道第三层有256个卷积核,包含三层小的卷基层:

【5、从Conv_3到Conv_4之间的过度:】

池化没有问题,但是这里75不是一个偶数怎么弄,还记得我们第一部分前面的括号吗?

就是这样,我们在75这里相加了一个一,使之成为76,变成一个偶数,还有一种方法是通过步长的设置这里先不展开来讲了;

【6、后续的步骤】

  后面的方法很简单,根据我给的那个VGG16的表格查找每一层里面有什么卷积核?多少个?池化的大小?步长多少?是否需要Padding?解决这些问题,你的VGG16就已经完全可以从头到尾说清楚了!!!

【7、Faster Rcnn的例子】

http://blog.csdn.net/errors_in_life/article/details/70916583

这篇关于看懂vgg16的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907876

相关文章

深度学习 --- VGG16能让某个指定的feature map激活值最大化图片的可视化(JupyterNotebook实战)

VGG16能让某个指定的feature map激活值最大化图片的可视化         在前面的文章中,我用jupyter notebook分别实现了,预训练好的VGG16模型各层filter权重的可视化和给VGG16输入了一张图像,可视化VGG16各层的feature map。深度学习 --- VGG16卷积核的可视化(JupyterNotebook实战)-CSDN博客文章浏览阅

深度学习 --- VGG16各层feature map可视化(JupyterNotebook实战)

VGG16模块的可视化 VGG16简介:          VGG是继AlexNet之后的后起之秀,相对于AlexNet他有如下特点:         1,更深的层数!相对于仅有8层的AlexNet而言,VGG把层数增加到了16和19层。         2,更小的卷积核!不仅如此,相对于AlexNet中的大卷积核(如下图中的 11x11和5x5卷积核),VGG中只使

【猫狗分类】Pytorch VGG16 实现猫狗分类3-生成器+数据增强

背景 进行生成器的构建,还有数据增强。并且封装在data.py函数里。 声明:整个数据和代码来自于b站,链接:使用pytorch框架手把手教你利用VGG16网络编写猫狗分类程序_哔哩哔哩_bilibili 我做了复现,并且记录了自己在做这个项目分类时候,一些所思所得。 构建生成器+数据增强 这段代码定义了一个自定义的数据生成器类`DataGenerator`,用于处理图像数据,特别适用于

【猫狗分类】Pytorch VGG16 实现猫狗分类5-预测新图片

背景   好了,现在开尝试预测新的图片,并且让vgg16模型判断是狗还是猫吧。 声明:整个数据和代码来自于b站,链接:使用pytorch框架手把手教你利用VGG16网络编写猫狗分类程序_哔哩哔哩_bilibili 预测 1、导包 from torchvision import transformsfrom PIL import Imageimport matplotlib.pyplo

【猫狗分类】Pytorch VGG16 实现猫狗分类4-开始训练

背景 现在,我们已经完成了,数据集的清洗,标签的制作,也把VGG16的模型建立好了。那接下来,我们应该把数据,放到我们搭建的vgg16的模型里面,让模型针对这些猫和狗的图片,去进行训练,经过几个epoch后,我们希望可以得到,一个经过若干轮训练后,学习的比较好的w,这样,当我们给这个vgg16的模型,一张它从没有见过的图片时候,它可以准确的判断出,这是猫还是狗。 声明:整个数据和代码来自于b站

【猫狗分类】Pytorch VGG16 实现猫狗分类2-模型构建

背景 数据处理做好了,现在搭建网络 声明:整个数据和代码来自于b站,链接:使用pytorch框架手把手教你利用VGG16网络编写猫狗分类程序_哔哩哔哩_bilibili 我做了复现,并且记录了自己在做这个项目分类时候,一些所思所得。 VGG16,就是C这样,叫16是因为,卷积+全连接层,一共有6层,因为这俩有可以学习的w,池化层是没有的,所以叫做,VGG16 VGG 16的样子 V

【猫狗分类】Pytorch VGG16 实现猫狗分类1-数据清洗+制作标签文件

Pytorch 猫狗分类 用Pytorch框架,实现分类问题,好像是学习了一些基础知识后的一个小项目阶段,通过这个分类问题,可以知道整个pytorch的工作流程是什么,会了一个分类,那就可以解决其他的分类问题,当然了,其实最重要的还是,了解她的核心是怎么工作的。 那首先,我们的第一个项目,就做猫狗的分类。 声明:整个数据和代码来自于b站,链接:使用pytorch框架手把手教你利用VGG16网

vgg16测试模型的实现

VGG-16又称为OxfordNet,是由牛津视觉几何组(Visual Geometry Group)开发的卷积神经网络结构。 VGG在2014年的 ILSVRC localization and classification 两个问题上分别取得了第一名和第二名 论文原标题《VERY DEEP CONVOLUTIONAL NETWORK SFOR LARGE-SCALE IMAGE RECOG

基于VGG16的猫狗数据集分类

目录 1. 作者介绍2. VGG16介绍2.1 背景介绍2.2 VGG16 结构 3. Cat VS Dog数据集介绍4. 实验过程4.1 数据集处理4.2 训练部分设置4.3 训练结果4.4 问题分析4.5 单张图片测试 5.完整训练代码与权重参考文献 1. 作者介绍 孙思伟,男,西安工程大学电子信息学院,2023级研究生 研究方向:深度强化学习与人工智能 电子邮件:sun

卷积网络项目:实现识别鲜花四分类对比LeNet5、VGG16、ResNet18、ResNet34分类网络

卷积四分类项目 Gitee传送门 分类目标选取 鲜花 杏花 apricot_blossom桃花 peach_blossom梨花 pear_blossom梅花 plum_blossom 模型选择 卷积 LeNet5VGG16ResNet18ResNet34 以图搜图 获取相似度前10的搜图结果 数据清洗 鲜花四分类 删除非图片文件 删除重复图片 整理