通俗易懂理解SegNet语义分割模型

重要说明:本文从网上资料整理而来,仅记录博主学习相关知识点的过程,侵删。

一、参考资料

深度学习之图像分割—— SegNet基本思想和网络结构以及论文补充

一文带你读懂 SegNet(语义分割)

二、相关介绍

1. 上采样(Upsampling)

关于上采样的详细介绍,请参考另一篇博客:Upsampling上采样相关技术

3. 转置卷积(Transposed Convolution)

关于转置卷积的详细介绍,请参考另一篇博客:深入浅出理解转置卷积Conv2DTranspose

三、SegNet网络模型

1. SegNet的创新点

SegNet与U-net网络相似,主要的区别是提出了最大池化索引,通过记录池化的位置,在上采样时恢复特征信息。具体来说,SegNet在进行池化操作时,记录池化所取值的位置,在上采样时直接用当时记录的位置进行反池化(UpPool),这样做的作用是更好的保留边界特征信息。

2. 池化索引(pooling indices)

2.1 最大池化(Max-Pooling)

Pooling 在CNN中是使得图片缩小一半的手段,通常有Max-PoolingAverage-Pooling两种 Pooling 方式,下图所示的是Max-PoolingMax-Pooling 是使用一个2x2的filter,取出这4个权重最大的一个,原图大小为4x4,Pooling 之后大小为2x2,原图左上角粉色的四个数,最后只剩最大的6,这就是max的意思。

在这里插入图片描述

2.2 池化索引的原理

SegNet是如何记录池化位置的呢?答案就是通过池化索引(pooling indices)。

在SegNet中的 Pooling 与传统 Pooling 多了一个index功能,也就是每次 Pooling,都会保存通过max选出的权值在2x2 filter中的相对位置,对上图的6来说,6在粉色2x2 filter中的位置为(1, 1)(index从0开始),黄色的3的index为(0, 0)。同时,从网络框架图可以看到绿色的 pooling 与红色的 upsampling 通过 pool indices 相连,实际上是 pooling 后的indices输出到对应的 upsampling(由于网络结构是对称的,因此第1次的 pooling 对应最后1次的 upsamping,如此类推)。

Upsamping 就是 Pooling 的逆过程,index在 Upsampling 过程中发挥作用,Upsamping使得图片尺寸变大2倍。我们清楚的知道 Pooling 之后,每个filter会丢失了3个权重,这些权重是无法复原的,但是在 Upsamping 层中可以得到在 Pooling 中相对 Pooling filter 的位置。所以Upsampling 中先对输入的特征图放大两倍,然后把输入特征图的数据根据 Pooling indices 放入,如下图所示,Unpooling 对应上述的 Upsamplingswitch variables 对应 Pooling indices

在这里插入图片描述

2.3 SegNet与FCN对比

对比FCN可以发现,SegNet在 Unpooling 时用index信息,直接将数据放回对应位置,后面再接Conv训练学习。这个上采样不需要训练学习(只是占用了一些存储空间)。而FCN利用转置卷积(Transposed Convolution)对 feature map 进行 upsampling,这一过程需要学习,同时将encoder阶段对应的 feature map 做通道降维,使得通道维度和 upsampling 相同,这样就能做像素相加(Add),得到最终的decoder输出。

在这里插入图片描述

3. SegNet网络结构

SegNet是基于Encoder-Decoder的网络结构,Encoder的backbone采用VGG-16(去除FC层)。SegNet网络结构,如下图所示:

在这里插入图片描述

在Encoder过程中,通过卷积提取特征,SegNet使用 padding=same 的卷积,即执行卷积操作后保持图像原始尺寸;在Decoder过程中,同样使用使用 padding=same 的卷积对缩小后的特征图进行上采样,不过卷积的作用是为了丰富上采样的图像信息,使得在Encoder的Pooling过程丢失的信息可以通过学习通过Decoder得到。然后对上采样后的图像进行卷积处理,来完善图像中物体的几何形状,将encoder中获得的特征还原到原来图像的具体的像素点上。最后利用 soft-max 多分类器对Decoder输出的特征图进行逐像素分类(pixel-wise classification)。

4. SegNet性能对比

在这里插入图片描述

从上面表格中可以看出:

  • SegNet比FCN和DeepLabv1慢,因为SegNet包含解码器架构。它比DeconvNet更快,因为它没有全连接层。
  • SegNet在训练和测试期间的内存要求都很低。并且模型尺寸比FCN和DeconvNet小得多。

四、相关经验

(TensorFlow)代码实现

github代码:Tensorflow-SegNet

五、参考文献

[1] Badrinarayanan V, Kendall A, Cipolla R. Segnet: A deep convolutional encoder-decoder architecture for image segmentation[J]. IEEE transactions on pattern analysis and machine intelligence, 2017, 39(12): 2481-2495.

[2] Badrinarayanan V, Handa A, Cipolla R. Segnet: A deep convolutional encoder-decoder architecture for robust semantic pixel-wise labelling[J]. arxiv preprint arxiv:1505.07293, 2015.

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

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

相关文章

CPP中的异常处理机制,抛出异常时几种方法性能的比较,以及异常处理和继承配合调用多态的一个小项目(顺便贴一个关于win上clion占用内存过高的解决方法)

目录 写在前面 为什么需要异常处理机制? 异常处理机制的方法 异常接口的声明 异常类型的生命周期以及不同类型异常的测试案例 异常处理与继承 异常处理的基本思想 致谢 写在前面 拖更了几天,但是其实博主一直都在学习的,只是没有之前…

vue3中使用markdown编辑器

首先安装 npm i md-editor-v3 Setup 模板 <template><MdEditor v-model"text" /> </template><script setup> import { ref } from vue; import { MdEditor } from md-editor-v3; import md-editor-v3/lib/style.css;const text ref(Hell…

R语言-检验正态性

1.为什么要检验正态性 首先需要明确正态性与正态分布是有区别的&#xff0c;正态分布&#xff08;标准分布&#xff09;是统计数据的分布方式&#xff0c;是个钟形曲线&#xff0c;已平均值为对称轴&#xff0c;数据在对称轴两侧对称分布。正态性是检验实际数据与标准正态分布…

消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板

问题概览 目前主流的消息队列技术&#xff08;MQ技术&#xff09;分为RabbitMQ和Kafka&#xff0c;其中深蓝色为只要是MQ&#xff0c;一般都会问到的问题。浅蓝色是针对RabbitMQ的特性的问题。蓝紫色为针对Kafka的特性的问题。 MQ的应用场景 MQ主要提供的功能为&#xff1a;异…

Linux shell编程学习笔记42:hdparm命令

ChatGPT 和文心一言哪个更好用&#xff1f; 从智能回复、语言准确性、知识库丰富度等方面比较&#xff0c;两大AI助手哪个更胜一筹&#xff1f;快来和我们分享一下你的看法吧~ 0 前言 获取硬盘序列号是信息资产管理和信息安全检测中经常要收集的信息&#xff0c;对于Linux来说…

Unity - 将项目转为HDRP

Camera window -> Package Manager 之后会出现HDRP向导窗口&#xff0c;均点击修复。 在Edit中&#xff0c;更改项目中的材质

景联文科技大模型数据集更新!教育题库新增高质量数学题、逻辑推理题及英文题

苏格拉底曾以“点燃火焰”的理念来诠释教育。随着大语言模型在教育中的不断应用&#xff0c;教育与AI的深度融合&#xff0c;让我们看到了“点燃火焰”的理念的更多可能性。 大语言模型可以通过与学生的互动&#xff0c;为他们提供个性化的学习体验&#xff0c;更好地满足学习需…

本地仓库如何与远程仓库进行关联

目录 设置Git 全局设置: 创建一个远程仓库 创建本地仓库 连接远程仓库 查看远程仓库origin的关联信息 查看所有远程仓库 切换远程仓库 设置Git 全局设置: git config --global user.name "your name" git config --global user.email "your email163.co…

目标检测数据集 - MS COCO

文章目录 1. 数据集介绍2. 使用pycocotools读取数据3. 验证mAP 论文&#xff1a;Microsoft COCO: Common Objects in Context 网址&#xff1a;https://arxiv.org/abs/1405.0312 官网&#xff1a;https://cocodataset.org/ 1. 数据集介绍 MS COCO是一个非常大型&#xff0c;且…

音频特效SDK,满足内容生产的音频处理需求

美摄科技&#xff0c;作为音频处理技术的佼佼者&#xff0c;推出的音频特效SDK&#xff0c;旨在满足企业内容生产中的音频处理需求。这款SDK内置多种常见音频处理功能&#xff0c;如音频变声、均衡器、淡入淡出、音频变调等&#xff0c;帮助企业轻松应对各种音频处理挑战。 一…

【服务器】服务器四个网口有几块网卡?

具有四个网口的服务器的网卡数量可能有点混乱。乍一看&#xff0c;您可能会假设服务器有四块网卡&#xff0c;每个端口一块。然而&#xff0c;这并非总是如此。在本文中&#xff0c;我们将分析具有四个网络端口的服务器的不同配置以及它可能有多少个网卡。 一个网卡&#xff0…

2024/1/24 图的基本应用

目录 查找文献 图的遍历 查找文献 P5318 【深基18.例3】查找文献 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a;这道题就是先建图&#xff0c;然后dfs深搜输出&#xff0c;bfs宽搜输出就行了 完整代码&#xff1a; #include <bits/stdc.h> #defi…

网安培训第二期——sql注入+中间件+工具

文章目录 宽字节注入插入注入二次注入PDO模式(动态靶机&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;)sql注入读取文件sql注入导出文件linux命令 10.12笔记sqlmapsqlmap参数 10.13笔记sqlmap 文件读写前后缀常用tamper及适用场景 10.…

【Java】SpringMVC路径写法

1、多级路径 ✅类路径和方法路径都可以写成多级 ✅其中&#xff0c;类路径写在方法路径前面 ✅与Servlet不同&#xff0c;SpringMVC中写不写“/”都可以 RequestMapping("/hello/t1") RestController public class HelloSpring {RequestMapping( value "world…

不学前沿技术与朽木浮草何异 ?Java11新特性

不学前沿技术与朽木浮草何异 &#xff1f;Java11新特性 于 2018 年 9 月 25 日正式发布&#xff0c;这是很重要的一个版本&#xff01;Java 11 和 2017 年 9 月份发布的 Java 9 以及 2018 年 3 月份发布的 Java 10 相比&#xff0c;其最大的区别就是&#xff1a;在长期支持(Lo…

013:获取K线图,增加周期可选

改进《001:如何获取A股个股的前复权K线数据》&#xff0c;增加周期可选。 代码&#xff1a; import tkinter as tk from tkinter import messagebox from tkcalendar import Calendar import pandas as pd import requests from urllib.parse import urlencodedef gen_secid(…

Docker:6种网络配置详解浅介

在Docker中&#xff0c;网络配置是一个重要的主题&#xff0c;因为容器需要与其他容器或外部网络进行通信。Docker提供了多种网络模式和配置选项&#xff0c;以便在不同的场景下满足用户的需求。 本文介绍这些网络模式的区别以及配置&#xff0c;相信看完以后你能够掌握Docker网…

100 道 Linux 面试题 附答案(二)

五、编程题 判断一文件是不是字符设备文件&#xff0c;如果是将其拷贝到 /dev 目录下&#xff1f; #!/bin/bash read -p "Input file name: " FILENAME if [ -c "$FILENAME" ];thencp $FILENAME /dev fi添加一个新组为 class1 &#xff0c;然后添加属于这…

16、Kafka ------ SpringBoot 整合 Kafka (配置 Kafka 属性 及对应的 属性处理类 解析)

目录 配置 Kafka 及对应的 属性处理类配置KafkaKafka配置属性的约定代码演示生产者相关的配置消费者相关的配置 代码&#xff08;配置文件&#xff09;application.properties 配置 Kafka 及对应的 属性处理类 配置Kafka spring.kafka.* 开头的配置属性&#xff0c;这些属性将由…

Python如何按指定列的空值删除行?

目录 1、按指定列的空值删除行2、滑动窗口按指定列的值填充最前面的缺失值 1、按指定列的空值删除行 数据准备&#xff1a; df pd.DataFrame({C1: [1, 2, 3, 4], C2: [A, np.NaN, C, D], C3: [V1, V2, V3, np.NaN]}) print(df.to_string()) C1 C2 C3 0 1 A V1 1 …