CV01-语义分割笔记和两个模型VGG & ResNet的笔记

2023-11-16

目录

一、语义分割

二、VGG模型

2.1 VGG特征提取部分

2.2 VGG图像分类部分

三、ResNet模型

3.1 为什么是ResNet

3.2 1×1卷积调整channel维度大小

3.3 ResNet里的BottleNeck

3.4 Global Average Pooling 全局平均池化

3.5 Batch Normalization


学习语义分割理论,学习两个经典的模型VGG & ResNet,记录一些自己认为重要的要点,以免日后遗忘。

一、语义分割

计算机视觉研究的分类问题,由简单到复杂经过以下几个阶段:

  1. 最初的,Image Classification,图像分类;比如,将一组(注意是一组,不是一个)图片分类,图片主体明显,将人物图像、风景图像等分为人物、风景、猫、狗等;
  2. 然后发展,Object Detection,目标检测;比如,在图像里找出某个对象并提取出来,将图片里的猫、狗用个框圈出来;
  3. 再后来发展到,Instance Segmentation,实例分割;实例分割与目标检测的区别是:目标检测只能用框框圈出猫、狗,框框也圈出了背景的像素,而实例分割可以把猫、狗的像素点全部标记出来而不标记背景像素;
  4. 目前,图片的分割已经到达了Semantic Segmentation,语义分割;语义分割就是将分类问题细化到像素级别,比如,图片里面每个像素都被标记为猫、草地、树木、天空等类别。所有像素都分类了,那么图片分类就达到了很精细的程度。

语义分割是一种稠密估计(Dense Predicttion)。以往的分类问题,最终的估值都是比输入小的,比如输入一张1024×768的图片,输出的或者是框框的坐标(x,y),或者是实例的像素点,都比输入1024×768。而稠密估计,输出和输入是一样大的,输入是1024×768的图片,输入的也是1024×768的图片,输入的每个像素点都被标记一个label。

 

二、VGG模型

VGG本身不是语义分割用的,但是VGG模型的设计思想被沿用至今,我们可以认为VGG的做法都是以后人们在用的做法。VGG模型分成两个部分,一个是特征提取,一个是图像分类。

2.1 VGG特征提取部分

特征提取都是经过多层的“卷积→激活函数、再池化”来提取出特征值。

VGG大量使用3×3的卷积,3×3卷积有什么好处呢?

  1. 减少参数,防止过拟合的发生。从感受野(Receptive Field)来看,两个3×3的卷积相当于一个5×5的卷积,三个3×3的卷积相当于一个7×7的卷积,以此类推。但是,参数减少了,2×3×3小于5×5,3×3×3小于7×7……
  2. 两个3×3的卷积相当于一个5×5的卷积,那么两个3×3的卷积就有两个非线性的激活函数;三个3×3的卷积相当于一个7×7的卷积,那么三个3×3的卷积就有三个非线性的激活函数……这就有了更多的表现能力。

VGG每经过一次池化(spatial方向H×W都减半),通道数就会加倍(channel方向增大一倍)。

2.2 VGG图像分类部分

特征提取结束后,接全连接层。接全连接层,先用flatten将H×W的矩阵拉成一个一维向量。

三、ResNet模型

ResNet模型的出现使网络的深度大大增加。

3.1 为什么是ResNet

一般认为,当网络越来也深,其表现能力越强。但是,实际上网络的能力并不会随着深度增加一直增大,会出现网络的退化现象,也就是深度增加其能力反而不如浅层网络(其在测试集和训练集上的准确率都下降),这个不是过拟合(训练集上准确率提高,测试集上准确率下降)。

即使只增加恒等映射层,实验结果也是网络出现退化,随着深度的加深连学习一个恒等映射都变困难。所以,何恺明提出残差网络Residual Net。来解决这个问题。

如果我们要学习一个估值H(x)有困难,那么我们就定义残差F(x)=H(x)-x,学习残差F(x)相对容易,然后我们用H(x)=F(x)+x来学习到原来的估值H(x)

为什么残差可以解决退化的问题呢?我个人的理解就是,经过深度网络的卷积、池化层操作,输入的信息损失太多。那么把这个损失的信息补回来就解决了退化问题。所以,每2个卷积就对结果加一次x,这样就不会造成输入信息的损失,网络层数可以一直加下去。

3.2 1×1卷积调整channel维度大小

因为卷积、池化操作,导致channel发生了变化,所以需要对输入x做channel方向调整,才能做加法。注意H(x)=F(x)+x里面的加号是张量的加法,不是直接加。

举例,输入的是RGB图像,也就是3×H×W的输入。经过卷积、池化等,就变成了64×H×W的维度,要相加,那么输入x也要变成channel=64。那么,1×1卷积就解决了这个问题。1×1卷积不改变spatial的大小,只改变channel的大小。

3.3 ResNet里的BottleNeck

随着深度的增加,每一层的参数个数会变的非常大(主要是channel变大,channel每层增大一倍,50层以上channel很大)。上面提到ResNet就是在计算得到的输出上加输入。

  1. 第一种卷积计算就是直接计算输出,加上输入就可以了,被称为BasicBlock。比如左图中,输入是channel=64,卷积计算和输出都是channel=64。
  2. 第二种channel很大的情况,解决办法是用1×1卷积调整维度,将channel降下来,算好了以后再用1×1卷积将channel升上去,被称为BottleNeck。比如右图中,输入channel=256,先1×1卷积将channel降到64,计算输出是channel=64,再用1×1卷积将channel升到256,在做加法。

256——64——256就像瓶颈一样——BottleNeck。

3.4 Global Average Pooling 全局平均池化

为了连接全连接层。需要把矩阵拉成一维向量,以前办法是flatten。C×H×W的张量,经过flatten变成了一维向量,有CHW个元素。

而全局平均池化的意思,实际上就是池化的kernel_size和输入大小相同,这样每个channel就只有一个平均值输出。C×H×W的张量,经过全局平均池化变成了C×1×1,有C个元素。

全局平均池化的好处就是,全连接层的参数大大减少,避免过拟合。

3.5 Batch Normalization

为什么conv里面的bias=False?因为,后面有Batch Normalization。如果conv就加bias,卷积后做batch normalization还要再加bias,那么conv的bias就无效了。所以,后面如果有bn就不加bias。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CV01-语义分割笔记和两个模型VGG & ResNet的笔记 的相关文章

  • 数据库设计基本步骤 / 数据库设计原则

    基本步骤 按照规范设计的方法 同时考虑数据库及其应用系统开发的全过程 可以将数据库设计分为以下 6 个阶段 需求分析阶段 需求分析是数据库设计的第一步 也是整个设计过程的基础 本阶段的主要任务是对现实世界要处理的对象 公司 部门及企业 进行

随机推荐

  • MBED移植日记:gpio_api移植(基于STM32F107RC)

    本文是继MBED串口API移植的又一篇系列文章 前阵子忙着赶项目 移植完了却没来得及写成文章来分享 今天来补上 一来可以温故知新 二来也可以献出自己的一点微薄之力 写的不好 移植的也不一定好 请大家多多指教 本文的gpio api模块与mb
  • WPF 更改数据源时通知表格 更改List通知DataGrid

    用到集合ObservableCollection 此集合微软的解释为 动态收集数据并通知到显示的控件 无论数据是刷新 删除 增加 更新 新建Model 注意看里面的大小写 using System using System Collecti
  • Elelment-ui(登录页面开发详细方法)

    1 使用浏览器进到element ui官网 登页面开发 登录代码如下
  • 释万行上师:罕见的修行真相揭秘【全】

    辟谷 的问题 当修到一定程度 胃气充满了以后 就不需要食物了 有的是短期不吃 也有的长期不吃 我们五脏六腑的元气 都是通过胃产生的 大家都知道 我们从嘴里吃进的食物 首先是贮存到了胃里面 通过胃的研磨 胃液的消化 再输送到小肠 营养在小肠被
  • 领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!

    目录 如何用 python ddt excel 实现接口自动化测试 一 准备工作 1 安装 python 环境 2 安装相关库 二 设计测试 1 编写 excel 文件 2 封装 excel 操作 3 封装 requests 请求 三 执行
  • java.lang.reflect.InvocationTargetException什么意思

    一般就是转换的问题 在SQL用别的list lt gt 接收的时候会报错
  • Financial Crisis【点双连通分量】

    题目链接 HDU 3749 你以为学了Tarjan会写几个边双就真的理解什么是双连通分量了吗 我原来真的不懂什么叫做点双BCC 不过这都没有关系 解决了这个问题之后 我终于知道了什么叫做点双连通分量了 这是一个绝对绝对经典的问题 首先讲一下
  • 时间序列分析 - ARMA/ARIMA参数估计及模型预测

    整体处理流程如下 平稳化处理 根据ADF单位根检验看序列是否平稳 对于非平稳序列可以进行差分 对数等等 对于得到的平稳序列需要检测是否为白噪声 如果是就没有必要再分析了 白噪声检验 1 由于白噪声序列期望为0 方差固定 因此会在y 0上下小
  • 菜鸟的java学习-------第一篇初识java

    初识Java 前言 做了快三年的C 了 对于C 没什么可说的 这门语言的效率比其他语言高上许多 但是这门语言及其难学 及其难以维护 开发成本很大 比如说java三个月能做成的项目 C 可能就要半年 甚至更长时间 基于C 的难开发 难维护的语
  • 解决Onedrive经常无法访问的问题

    在国内经常因为各种原因访问不了OneDrive的访问 可以通过下面的方式解决 添加两个DNS记录到hosts文件 C Windows System32 drivers etc 134 170 108 26 onedrive live com
  • PyTorch学习日志_20201031_线性模型

    日期 2020 10 31 主题 PyTorch入门 内容 学习如何构建线性模型解决问题 问题 学习时长 x 与考试成绩 y 的关系 学习时长 x 考试成绩 y 1 2 2 4 3 6 4 思路 具体代码如下 import numpy as
  • Qt控制台输入输出

    Qt控制台输入输出 在 pro 工程文件 中添加 CONFIG console include
  • 类模板与友元函数

    写在前面 学习黑马C 视频总结的知识点 一 类模板中全局函数类内实现 template
  • 关于差分信号

    对差分信 VDS 号而言 对其影响最大的因素是它们的对地阻抗是否一致 也就是对地平衡度 它们之间相对的阻抗影响并不特别重要 之间分布电容大了只会衰落信号强度 不会引入噪声和干扰 也就是对信噪比不会产生很大影响 差分信号只是使用两根信号线传输
  • File.Exists判断错误

    C File Exists判断错误 1 今天制作软件安装测试的时候发现一个问题 File Exists判断文件是否存在 明明这个文件是存在的 但是返回的确实false 跟踪代码发现还是这样 很是诡异 仔细看了一下接口说明才知道 如果没有权限
  • java中 ‘\b‘ 回退符的使用

    退格符 b b是退格符的意思 将光标回退一个字符的位置 可以结合空白字符使用达到类似删除的效果 1 回退符 b 后面没有内容 的情况 原样输出 回退符 b后面 没有内容 则原样输出 System out println x b x 回退符后
  • FPN(Feature Pyramid Networks)网络学习

    1 FPN在MASK R CNN中 从上图可以看到 FPN在MASK R CNN中主要是应用于Featue Maps的输出 但是FPN却不是MASK R CNN所独有的 FPN是一个独立的网络 即有无FPN都可以输出Feature Maps
  • 为什么linux kernel默认的页面大小是4K,而不是4M或8M?

    相信很多人在看内核内存管理部分的时候 都有这样一个疑问 为什么物理页面的大小选择4K 而不是大一些或者小一些呢 这个问题没有固定的答案 仁者见仁智者见智 每个人的关注点不一样 所以这篇文章不是说给出一个固定的答案 更多的只是一篇讨论性的文章
  • IDEA打开一个项目时,idea左侧project模式下,不显示项目工程目录的解决方法

    在IDEA打开一个一个已有的项目chapter3时 idea左侧project模式下 左侧也没有project按钮 如下问题截图 ps 项目结构可以显示 但是src等目录不见 在网上查了一些方法 1 解决办法 方法1 找到 出错位置 修复
  • CV01-语义分割笔记和两个模型VGG & ResNet的笔记

    目录 一 语义分割 二 VGG模型 2 1 VGG特征提取部分 2 2 VGG图像分类部分 三 ResNet模型 3 1 为什么是ResNet 3 2 1 1卷积调整channel维度大小 3 3 ResNet里的BottleNeck 3