5.23.12 计算机视觉的 Inception 架构

1. 介绍

分类性能的提升往往会转化为各种应用领域中显着的质量提升,深度卷积架构的架构改进可用于提高大多数其他计算机视觉任务的性能,这些任务越来越依赖于高质量的学习视觉特征。在 AlexNet 功能无法与手工设计、制作的解决方案竞争的情况下,网络质量的改进为卷积网络带来了新的应用领域。

GoogleNet 使用了大约 700 万个参数,比其前身 AlexNet(使用 6000 万个参数)减少了 9 倍。此外,VGGNet 使用的参数比 AlexNet 多大约 3 倍。

Inception 架构的复杂性使得对网络进行更改变得更加困难。如果单纯地扩展架构,则很大一部分计算收益可能会立即丢失。如果认为有必要增加某些 Inception 式模型的容量,那么只需将所有  滤波器组大小  的数量加倍的简单变换将导致计算成本和参数数量增加 4 倍。

2. 通用设计原则

避免表示瓶颈,尤其是在网络早期。前馈网络可以用从输入层到分类器或回归器的非循环图来表示。这为信息流定义了明确的方向。对于网络中的任何一个分割(即将网络分成两部分,一边是输入,一边是输出),都可以评估通过该分割的信息量。

从输入到输出,表示的大小(即特征的数量或维度)应该逐渐减小,直到达到用于特定任务的最终表示。这种逐渐减小的过程有助于网络逐步提取和精炼关键信息,同时避免不必要的复杂性。理论上,信息内容不能仅仅通过表示的维度来评估,因为它抛弃了相关结构等重要因素;维度仅提供信息内容的粗略估计。


更高维度的表示更容易在网络中进行 局部处理。增加卷积网络中每个图块的激活可以实现更多独立的特征。由此产生的网络将训练得更快。 


空间聚合(如池化或者更复杂的聚合函数)可以在较低维度的嵌入上完成,而不会损失太多或任何表示能力。在执行更分散的(例如 3 × 3)卷积之前,可以在空间聚合之前减小输入表示的维度,而不会产生严重的不利影响。如果在 空间聚合 上下文中使用输出,则相邻单元之间的强相关性会导致降维期间的信息损失会较少。


平衡网络的宽度和深度。通过平衡  每个阶段 滤波器的数量和网络的深度可以达到网络的最佳性能。增加网络的宽度和深度有助于提高网络质量。然而,如果两者并行增加,则可以达到恒定计算量的最佳改进。

一个阶段可以是一个卷积层或者一组卷积层。

3. 使用大卷积核尺寸分解卷积

由于 Inception 网络是完全卷积的,因此每个权重对应于每次激活的一次乘法。因此,计算成本的任何减少都会导致参数数量的减少。这意味着通过适当的因子分解,我们最终可以获得更多 解耦 的参数,从而加快训练速度。此外,我们可以利用计算和内存节省来增加网络的滤波器组大小,同时保持在单台计算机上训练每个模型副本的能力。

解耦(Decoupling)是指降低系统组件之间的依赖程度

解耦是希望减少各个模块之间的依赖关系,使模块间尽可能的独立存在 

3.1 因式分解为更小的卷积

具有较大空间滤波器(例如 5 × 5 或 7 × 7)的卷积在计算方面往往会非常昂贵。例如,在输入数据有 m 个特征图或通道时 使用 n 个卷积核的 5 × 5 卷积的计算成本是具有相同数量卷积核的 3 × 3 卷积的 25 / 9 = 2.78 倍。当然,5×5 卷积核可以捕获较早层中较远的单元激活之间的信号之间的依赖关系,因此卷积核几何尺寸的减小会导致表达能力的巨大损失。

3.2 空间分解为不对称卷积

通过使用非对称卷积,可以做得比 2 × 2 更好,例如n × 1。例如,使用 3 × 1 卷积后跟 1 × 3 卷积相当于滑动具有与 3 × 3 卷积相同的感受野的两层网络。

如果输入和输出 卷积核 的数量相等,那么对于相同数量的输出 卷积核 ,两层解决方案的成本仍然要低 33%。相比之下,将一个 3 × 3 卷积分解为两个 2 × 2 卷积仅节省 11% 的计算量。

理论上,我们可以更进一步,认为可以用 1 × n 卷积,然后是 n × 1 卷积来替换任何 n × n 卷积,并且随着 n 的增长,计算成本节省会急剧增加。

n × n 卷积分解后的 Inception 模块

为 17 × 17 的特征图选择 n = 7

在中等网格大小上(在 m×m 特征图上,其中 m 范围在 12 到 20 之间)给出了非常好的结果。在这个层面上,通过使用 1 × 7 卷积,然后使用 7 × 1 卷积可以获得非常好的结果。

4. 辅助分类器的实用性

引入了辅助分类器的概念来提高非常深的网络的收敛性。最初的动机是将有用的梯度推到较低层,使它们立即有用,并通过解决非常深的网络中的梯度消失问题来提高训练期间的收敛性。在训练接近结束时,具有辅助分支的网络开始超过没有任何辅助分支的网络的准确性,并达到稍高的平台。

5. 有效减小网格(特征图)尺寸

在传统的卷积网络中,通常会使用某种池化操作(如最大池化或平均池化)来减小特征图的网格大小。在应用最大池化或平均池化之前,通常需要扩展网络滤波器的激活维度,以避免所谓的“表达瓶颈”。

例如,从一个具有 k 个 卷积核 的 d\times d 网格开始,如果希望得到一个具有 2k 个 卷积核 的\frac{d}{2}\times \frac{d}{2} 网格,首先需要在更大的网格上进行一个步长为1的卷积,使用 2k 个卷积核,然后应用一个额外的池化步骤。这意味着整体的计算成本主要由在较大网格上使用 2d^2k^2 操作的昂贵卷积所决定。

使用卷积替代池化

一种可能的解决方案是使用卷积来替代池化,这可以将计算成本减少到 2(\frac{d}{2})^2k^2 ,即减少到原来的四分之一。然而,这种替代方案会导致表示的整体维度降低到  (\frac{d}{2})^2k ,从而导致网络表达能力下降(即出现表达瓶颈)。

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

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

相关文章

如何评价刘强东说“业绩不好的人不是我兄弟”

在近日的一次京东管理层会议上,创始人刘强东以不容置疑的口吻表明了对公司文化的坚定态度:“凡是长期业绩不好,从来不拼搏的人,不是我的兄弟。”这句话不仅是对那些工作表现不佳的员工的直接警告,也透露出京东在追求业…

three.js能实现啥效果?看过来,这里都是它的菜(08)

在Three.js中实现旋转动画的原理是通过修改对象的旋转属性来实现的,通常使用渲染循环(render loop)来更新对象的旋转状态,从而实现动画效果。 具体的原理包括以下几个步骤: 创建对象:首先创建一个需要旋转…

AIGC-风格迁移-style Injection in Diffusion-CVPR2024HighLight-论文精度

Style Injection in Diffusion: A Training-free Approach for Adapting Large-scale Diffusion Models for Style Transfer-CVPR2024HighLight 代码:https://github.com/jiwoogit/StyleID 论文:https://jiwoogit.github.io/StyleID_site/ 为了解决风格迁…

你真的会使用Vue3的onMounted钩子函数吗?Vue3中onMounted的用法详解

目录 一、onMounted的前世今生 1.1、onMounted是什么 1.2、onMounted在vue2中的前身 1.2.1、vue2中的onMounted 1.2.2、Vue2与Vue3的onMounted对比 1.3、vue3中onMounted的用法 1.3.1、基础用法 1.3.2、顺序执行异步操作 1.3.3、并行执行多个异步操作 1.3.4、执行一次…

Rust腐蚀怎么用服务器一键开服联机教程

1、进入控制面板 首次登陆需要点击下方重置密码,如何再点击登录面板,点击后会跳转到登录页面,输入用户名和密码登录即可 2、设置游戏端口 由于腐蚀的设置需要三个端口,它们用于游戏端口(必须为首选端口)&a…

FFMPEG 解码过程初步学习

1. 视频文件解码过程 解码过程 步骤如下: 视频文件(封装格式,MP4/FLV/AVI 等)获取视频格式信息等解复用为Stream 流, 准备解码用的Codec将Stream 流 使用解码器解为Raw 格式针 1.1 音视频格式填充: int…

找不到msvcr110.dll无法继续执行代码的原因分析及解决方法

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是找不到msvcr110.dll文件。这个错误通常发生在运行某些程序或游戏时,系统无法找到所需的动态链接库文件。为了解决这个问题,下面我将介绍5种常见的解决方法。 一&#…

Vue3实现上传照片以及回显

Vue3实现上传照片以及回显 一、安装Element Plus二、案例1、基本示例 三、进阶案例1、代码2、代码解释1、上传接口展示2、查询接口展示组件属性 3、效果展示 一、安装Element Plus 使用 Element Plus 组件库来实现上传照片和回显同样很简单,你可以按照以下步骤进行…

用栈实现队列(C语言)

目录 题目题目分析 代码栈的实现结构体。栈的初始化栈的销毁 入栈删除查找顶部数据判空 答案结构体初始化插入数据删除数据获取队列开头元素判空销毁栈 题目 题目分析 链接: 题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、po…

pyside6下没有designer.exe、pyside6-uic.exe等

使用conda安装的pyside6(conda install pyside6),发现pyside6目录下没有designer.exe、pyside6-uic.exe等;designer.exe在Miniconda3/Library/bin下 pyside6-uic.exe、pyside6-rcc.exe在Miniconda3\Scripts下 但是 使用pip安装…

【MyBatis】MyBatis解析全局配置文件源码详解

目录 一、前言 思维导图概括 二、配置文件解析过程分析 2.1 配置文件解析入口 2.2 初始化XMLConfigBuilder 2.3 XMLConfigBuilder#parse()方法:解析全局配置文件 2.3.1 解析properties配置 2.3.2 解析settings配置 2.3.2.1 元信息对象(MetaClas…

解决移植Metasploitable3到VM虚拟机无网络的问题

第一步 导入后不要开机,先在虚拟机设置里面将原有的两个网络适配器移除。 第二步 接着在选项里面,在客户机操作系统里面,选择Microsoft Windwos(W), 版本选择Windows Server 2008 R2 x64 第三步 先打开虚拟机,然后…

Python_文件操作_学习

目录 一、关于文件的打开和关闭 1. 文件的打开 2.文件的关闭 二、文件的读取 1. 文件的读_r 2. 使用readline 3.使用readlines 三、文件的写入 1. 文本的新建写入 2.文本的追加写入 四、文件的删除和重命名 1.文件的重命名 2.文件的删除 五、文件的定位读写 1.t…

Unity Miscellaneous入门

概述 在Unity中有非常多好用的组件,也是Unity为我们提供的方便的开发工具,它的功能可能不是主流的内容,比如渲染,音乐,视频等等,所有Unity把这些内容统一归到了一个杂项文件组中。 Unity组件入门篇总目录-…

Python线程

Python线程 1. 进程和线程 先来了解下进程和线程。 类比: 一个工厂,至少有一个车间,一个车间中至少有一个工人,最终是工人在工作。 一个程序,至少有一个进程,一个进程中至少有一个线程,最终…

langchain实战-从0到1搭建ai聊天机器人

介绍 当前,人工智能大模型公司如雨后春笋般迅速涌现,例如 OpenAI、文心一言、通义千问等,它们提供了成熟的 API 调用服务。然而,随之而来的是不同公司的繁琐协议接入过程,这让许多开发者感到头疼不已。有没有一种统一…

SpringBoot + Redis实现对接口的限流

目录 前言 什么是限流? 实现限流 创建一个注解类 接着创建一个切面类 前言 在项目中,对于接口的限流,是任何项目都必不可少的一部分,主要是为了防止用户频繁的发送请求,对服务器造成压力。 另外一点就是防止外来攻…

C++之第八课

课程列表 今天我们来学一学C里的一些实用的东西。 1.域宽 说到域宽setw&#xff0c;就叒要加头文件了。 #include<iomanip> 使用格式是&#xff1a; cout<<setw(5)<<"123"; setw括号里面可以改数字&#xff0c;后面就是输出内容了&#xff…

COD论文笔记 Boundary-Guided Camouflaged Object Detection

动机 挑战性任务&#xff1a;伪装物体检测&#xff08;COD&#xff09;是一个重要且具有挑战性的任务&#xff0c;因为伪装物体往往与背景高度相似&#xff0c;使得准确识别和分割非常困难。现有方法的不足&#xff1a;现有的深度学习方法难以有效识别伪装物体的结构和细节&am…