P9-CNN学习1.1-VggNet

news2025/4/5 21:07:09

目录

一.Abstract

二.Introduction

三.ConvNet Configuration

3.1Architecture

3.2Configuration

3.3Discussion

四.Classification Framework

4.1Training

4.2Testing

4.3Implementation Detail

五.Classification Experiments

5.1Single Scale Evaluation

5.2Multi Scale Evaluation

5.3Multi Crop Evaluation

5.4Convent Fusion

六.Conclusion

七.Innovation point

一.Abstract

         VggNet全部采用3*3卷积核提取特征,并且将神经网络层数提高到16-19层(AlexNet只有8层,也可以说11层)并且在 ImageNet-2014在本地化和分类两个方向分别获得第一和第二名,并且表现最好的两个模型已经投入到未来研究中。

二.Introduction

        简述了一下发展过程,意义不大。略

三.ConvNet Configuration

         原文中并不太好理解网络架构,VGG16提供了更易理解的版本

链接:VGG16 - Convolutional Network for Classification and Detection 

3.1Architecture

        在网络中,图像输入大小是224*224的RGB图像,所做的唯一预处理是从每个像素减去训练集上计算的平均值。使用3*3卷积核(stride=1)和1*1卷积核(2.3会详细说作用),并且进行padding=1操作,使用5个2*2max-pooling进行池化操作。

        在卷积层后由三个FC(全连接层组成),分别为4096 4096 1000

        在所有卷积操作后都加入了Relu进行非线性操作,并且与AlexNet不同的是去掉了LRN(4会详细说明LRN不会改善性能反而导致内存消耗和增加计算时间)

3.2Configuration

        这里主要是为了2.3做铺垫,说明网络增加 ,但网络中的权重并不大于较浅的网络权重

3.3Discussion

        不同于其他模型,VggNet使用细粒度更小的3*3卷积核进行提取特征,使用2个代替5*5,3个代替7*7 ,并且通过数学方法证明其更能节省参数且特征提取更加准确。

        使用1*1卷积核提高模型的非线性


想了解更多可以见之前的博客:YOLO学习1.2-YOLOV1中部分术语含义和作用_汉卿HanQ的博客-CSDN博客 

         在不同模型中,不断将网络层数由11提高到19(为什么不更多了呢?),但其参数并没有出现爆炸式增加。可以在table 1看到,网络每经过一次max-pooling特征图个数就会增加,这是因为池化会丢失部分特征,因此通过增加特征图个数来弥补特征丢失。

四.Classification Framework

4.1Training

 

        这里介绍了一些训练参数的设置和初始化

        1.momentum=0.9

        2.L2正则化=5*10^-4

        3.Dropout=0.5

        4.Learning rate=10^-2(当验证集准确度不变时,learning rate下降10^-1)

        5.随机权重初始化:权重初始化为均值为0,方差为0.01的正态分布,偏差为0.

         (作者论文提交后发现,可以不用上面的方法初始化权重而是直接使用 Glorot & Bengio(2010) 的随机初始化程序就能得到很好的效果)

在这里插入图片描述

        6.图片输入大小:224*224

        7.batch_size=256 

        关于图片的大小S使用了两种方法训练

        1.第一种方法:固定 S,在实验中,评估模型用了两种图片大小:256 和 384。第一次训练固定图像大小 S = 256,为了加快 S = 384 的网络,将 S = 256 模型训练得到的参数作为 S = 384 模型的初始化权重,初始化学习率为 0.001。
        2.第二种方法:多尺度的训练。不固定训练图片的大小,将其固定在一个范围中 [256, 512],在训练时,考虑到不同尺度的图片作为训练集训练网络对训练是有益的,也可以看做通过尺度抖动增加训练数据集。这样训练出来的模型可以识别各种大小的图片,由于速度方面的原因,我们训练多尺度模型的方法是对相同配置的单尺度模型的所有层进行微调,预先用固定的S = 384进行训练。

4.2Testing

        在测试阶段,在使用一张测试图片的不同大小进行测试,最后取这些结果平均值作为结果也会改善其性能。

        为了能够和全连接层连接上,在最后一个卷积层做一个max-pooling,这样即使不同大小的输入图像,通过最后一次池化,都可以连接在同一个全连接层。

        为了增强数据集,通过水平翻转图像技术,最后将原始图片和反转图片结果平均值作为该图片的最终结果。

        在评估网络时,把每张图片分为3个scale,每个裁处50个图片,这样一张图片九变成了150张。

4.3Implementation Detail

        不同于AlexNet,VggNet使用单系统安装多GPU进行炼丹,因为梯度计算跨GPU同步 ,所以与单卡训练相同,在4张显卡的系统上,训练VggNet需要2-3周时间(因为层数增加,其训练时间比AlexNet要高出较多)

五.Classification Experiments

        主要呈现了在 ILSVRC-2012 数据集上的分类结果,分类表现主要有两种评价指标:top-1 and top-5 errro,top-5 error 是 ILSVRC 的主要评价指标

5.1Single Scale Evaluation

对于模型 A,A-LRN,B,它们都采用的是固定 S = 256,并且我们发现模型 A-LRN 的表现还没有模型 A 好,所以对于后面的模型,都没有使用 LRN(局部响应正则化),但是我们观察到从模型 A 到模型 B,随着深度的增加,top-1 和 top-5 error 也在下降。

  再来观察模型 C、D、E,它们的 train 都测试了3种图片尺度,分别是 S=256,S=384,S=[256;512]。我们只看三个模型的 S=256 和 S=384,我们很容易发现不管哪一种模型,当 S=384,其模型的 top-1 和 top-5 是要优于 S=256 的。那是因为图片的分辨率越高,我们能够更容易捕捉到一些空间特征,所以其分类准确度就越高。

  最后,我们再来看看的三种模型的 S=[256;512] 的这种情况,我们很容易发现这种情况的分类结果不管在哪一种模型中都是表现最好的。这也证明了通过尺度来扩充训练集确实有助于捕获多尺度图像统计。

5.2Multi Scale Evaluation

        根据表格我们可以得出结论:在测试阶段的尺度抖动相较于单尺度的相同模型会有更好的表现。其中模型 D 和 E 表现最好。表现最好的单个网络在验证数据集上 top-1 和 top-5 error 达到了 24.8%/7.5%,在测试数据集上,模型 E 达到了 7.3 % 的 top-5 error。

5.3Multi Crop Evaluation

         多裁剪评估。这里主要用到两种评估方法,一种是 dense,即评估时所使用的图片是整张图片,不经过任何裁剪。那么另一种就是 multi-crop,就是评估时使用的是裁剪后的图片。从评估结果来看使用Multi Crop比dense效果更好一些,而且因为两种方法是互补的,两种方法结合使用的表现比单独使用任何一种方法的效果都要好。

5.4Convent Fusion

        模型融合。通过融合几种模型,最后取各个模型的 soft-max 结果的平均值作为模型的输出,可以从实验结果发现,融合一个模型 D 和模型 E ,并且在评估时使用 multi-crop 和 dense 的方法得到的表现最好。

Comparison With The State Of The Art in ILSVRC classification

        在 2014 年的挑战赛中,GoogLeNet 以 6.7% 的 error 夺冠,VGGNet 以 6.8% 的 error 获得第二名。但是如果从一个网络的分类准确度来看,VGG 是以 7.0% 的 error 要优于 GoogLeNet 的 7.9%。

六.Conclusion

         在这项工作中,我们评估了用于大规模图像分类的非常深的卷积网络(多达19个权重层)。结果表明,表示深度对分类精度有好处,使用传统的 ConvNet 架构可以实现 ImageNet 挑战数据集的最先进的性能 (LeCun 等人,1989;Krizhevsky 等人,2012 年)大幅增加深度。在附录中,我们还展示了我们的模型可以很好地推广到广泛的任务和数据集,匹配或优于围绕较少深度图像表示构建的更复杂的识别管道。我们的研究结果再次证实了深度在视觉表现中的重要性。

七.Innovation point

        1.整个网络采用3*3卷积核,提高特征提取细粒度,增加了神经网络深度,增加更多的线性变化,使用2个代替5*5,3个代替7*7还减少了参数数量。

        2.引入1*1卷积核,在不影响输入输出维度情况下,引入非线性变化,增加网络表达能力,降低计算量等

        3.通过预训练方式更好的初始化权重,加快训练的收敛速度

        4.采用Multi-Scale的方式训练和预测,可扩充数据集,防止过拟合,提高准确率

        5.提高了网络深度到16-19层

        6.舍弃了AlexNet LRN层

        7.采用了多个池化层,这些池化层使用了较小的池化窗口(通常是2x2)和较大的步长,从而减少了特征图的尺寸,同时有效地减少了计算量。

本文参考VggNet 论文分析_基于vgg的毕业论文_蓝子娃娃的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/827610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】Spring Boot的创建和使用,以及配置文件(.properties和.yml)和日志文件(LoggerFactory和lombok)

什么是Spring BootSpring Boot的优点创建Spring Boot项目Spring Boot的配置文件配置文件的作用配置文件的格式properties 配置文件说明properties的基本语法读取配置文件properties的缺点 yml 配置文件说明基本语法yml 连接数据库读取配置文件yml进阶yml 配置不同数据类型及 nu…

IO进程线程第五天(8.2)进程函数+XMind(守护进程(幽灵进程),输出一个时钟,终端输入quit时退出时钟)

1.守护进程&#xff08;幽灵进程&#xff09; #include<stdio.h> #include<head.h> int main(int argc, const char *argv[]) {pid_t cpid fork();if(0cpid){ //创建新的会话pid_t sidsetsid();printf("sid%d\n",sid);//修改运行目录为不可卸载的文件…

蓝牙资讯|三星Galaxy SmartTag 2亮相FCC,智能防丢市场持续火爆

三星的 Galaxy SmartTag 2 已经现身美国联邦通信委员会&#xff08;FCC&#xff09;网站&#xff0c;外观设计也随之曝光&#xff0c;该设备呈扁平的椭圆形&#xff0c;顶部有一个巨大的钥匙环孔&#xff0c;看起来有点像雪茄切割器。如果这是一个普通的钥匙环大小的孔&#xf…

UG\NX 二次开发 选择相切面、相邻面的选择面控件

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; 有群友问“UFUN多选功能过滤面不能选择相切面或相邻面之类的吗&#xff1f;” 这个用Block UI的"面收集器"就可以&#xff0c;ufun函数是不行的。 效果&am…

基于text2vec和faiss开发实现文档查询系统初体验

最近接触到了一些文本向量化的预训练模型&#xff0c;感觉相比较自己去基于gensim去训练词向量来说&#xff0c;使用预训练模型可能是更高效的方式了&#xff0c;正好有一个想法一直在想能够以什么样的形式间接的实现问答&#xff0c;说白了这里的问答跟我们理解的chatGPT类型的…

iOS——Block one

块类似于匿名函数或闭包&#xff0c;在许多其他编程语言中也存在类似的概念。 可以访问上下文&#xff0c;运行效率高 Block 以下是块的一些基本知识&#xff1a; 块的定义&#xff1a;块是由一对花括号 {} 包围的代码片段&#xff0c;可以包含一段可执行的代码。块的定义使…

125.验证回文串

目录 一、题目 二、代码 一、题目 125. 验证回文串 - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution { public: bool ABC(char& s) {if (s > 65 && s < 90){s 32;return true;}if (s > 97 && s < 122){return true;}if …

FPGA开发:音乐播放器

FPGA开发板上的蜂鸣器可以用来播放音乐&#xff0c;只需要控制蜂鸣器信号的方波频率、占空比和持续时间即可。 1、简谱原理 简谱上的4/4表示该简谱以4分音符为一拍&#xff0c;每小节4拍&#xff0c;简谱上应该也会标注每分钟多少拍。音符时值对照表如下图所示&#xff0c;这表…

无涯教程-Lua - while语句函数

只要给定条件为真&#xff0c;Lua编程语言中的 while 循环语句就会重复执行目标语句。 while loop - 语法 Lua编程语言中 while 循环的语法如下- while(condition) dostatement(s) end while loop - 流程图 在这里&#xff0c;需要注意的关键是 while 循环可能根本不执行。…

Go语音介绍

Go语言介绍 Go 即Golang&#xff0c;是Google公司2009年11月正式对外公开的一门编程语言。 Go是静态强类型语言&#xff0c;是区别于解析型语言的编译型语言。 解析型语言——源代码是先翻译为中间代码&#xff0c;然后由解析器对代码进行解释执行。 编译型语言——源代码编…

【树形DP+换根思想】2022牛客多校加赛 H

登录—专业IT笔试面试备考平台_牛客网 题意&#xff1a; 思路&#xff1a; 这个虽然是树形DP&#xff0c;却用了换根的思想.... 首先&#xff0c;后缀0的个数可以转化成min(cnt2,cnt5)&#xff0c;其中cnt2为2的因子个数&#xff0c;cnt5为5的因子个数 然后进行DP 设dp[u]…

面试之多线程(三)

1.进程和线程的区别 根本区别&#xff1a;进程是操作系统分配资源的最小单位&#xff1b;线程是CPU调度的最小单位所属关系&#xff1a;一个进程包含了多个线程&#xff0c;至少拥有一个主线程&#xff1b;线程所属于进程开销不同&#xff1a;进程的创建&#xff0c;销毁&…

基于Vue+ElementUI+Echarts+G2Plot的仪表盘设计器,代码完全开源

简介 &#x1f525;DashBoard基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的仪表盘设计器&#xff0c;具备仪表盘设计、预览、资源管理、组件管理等能力&#xff0c;支持JSON、MySQL、Oracle、PostgreSQL、HTTP、JavaScript、Groovy等数据集接入&#xf…

类加载器的双亲委派机制和源码分析

双亲委派机制 双亲委派就是一个从子到父的过程,然后还有一个从父到子的状态。具体如下: 如果一个类加载器收到了类加载的请求,它会首先去自己的缓存中查找是否加载过这个类(findLoadedClass),如果有,那么直接加载。如果没有就会让父加载器加载,父加载器会先去自己的缓…

自定义elementui的主题

通常情况下&#xff0c;我们使用elementui框架的时候默认组件的主题都是白色的&#xff0c;比如&#xff1a; 但是如果想自定义主题&#xff0c;改变主题颜色&#xff0c;以及各种默认颜色&#xff0c;其实也不难&#xff1a; 配置默认主题&#xff0c;选好后点击下载 在vu…

软件外包开发的PHP开发框架

PHP有许多流行的开发框架&#xff0c;每个框架都有其独特的特点和优势。下面列举的只是一部分PHP开发框架&#xff0c;还有其他一些框架如Slim、Zend Framework等也值得一提。选择合适的框架取决于项目的需求和开发团队的偏好&#xff0c;您可以根据项目规模、复杂性和功能需求…

Golang之路---02 基础语法——异常机制:panic 和 recover

Golang的异常处理 Go 没有像 Java 和 .NET 那样的 try/catch 异常机制&#xff1a;不能执行抛异常操作。 在 Golang 中&#xff0c;有不少常规错误&#xff0c;在编译阶段就能提前告警&#xff0c;比如语法错误或类型错误等&#xff0c;但是有些错误仅能在程序运行后才能发生&…

【推荐】通用全面的APP测试用例设计

1、安装卸载 用例编号 测试内容 操作步骤 预期结果 测试次数 测试结果 备注 安装 1 通过第三方软件协助安装是否正常 第三方软件搜索app&#xff0c;安装 目标:支持360、豌豆荚、应用宝等主流辅助工具 1 Pass 2 在不同操作系统下安装是否正常 1、使用测试手机安装 …

面试总被问高并发负载测试,你真的会么?

本文将介绍使用50K并发用户测试轻松运行负载测试所需的步骤&#xff08;以及最多200万用户的更大测试&#xff09;。 ❶ 写你的剧本 ❷ 使用JMeter在本地测试 ❸ BlazeMeter SandBox测试 ❹ 使用一个控制台和一个引擎设置每引擎用户数量 ❺ 设置和测试群集&#xff08;一个…

【环形链表(带环链表)超详细总结】

题目一 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 使用快慢指针&#xff0c;如果慢指针等于快指针&#xff0c;就说明是带环链表链表的中间结点 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;…