【学习笔记】语义分割综述

2023-05-16

语义分割就是图像分割,是图像像素级的分类,即给图像的每一个像素点分类。与之临近的一个概念叫实例分割,实例分割就是语义分割+目标检测。语义分割只能分割出所有同类的像素,目标检测把不同的个体分开就行了,如Mask RCNN。

评价指标

在了解评价指标之前,先来看一下混淆矩阵。混淆矩阵来源于分类评价指标,表示的是A类别是否正确分类为A类别。

比如我们一个模型对15个样本进行预测,然后结果如下。

真实值:0 1 1 0 1 1 0 0 1 0 1 0 1 0 0

预测值:1 1 1 1 1 0 0 0 0 0 1 1 1 0 1

混淆矩阵是

 很明显,有了混淆矩阵后就可以很方便的计算准确率,召回率、F1 score等指标了。

1. Pixel Accuracy(像素准确率)

像素准确率是图像分割最简单的指标,就是正确分类的像素数量除以总像素数量,也就是混淆矩阵对角线的和除以矩阵的总和。即:

Pixel Accuracy = \frac{TP+TN}{TP+TN+FT+FN}=\frac{diag(confusion)}{sum(confusion)}

2. IOU(Intersection Over Union)

顾名思义,IOU就是交并比,Ground Truth与Prediction区域的交并比。

 假如人的像素类别为1, 背景的像素类别为0。对应到混淆矩阵上,对于类别1来说,交集就是对角线元素,并集为真实标签为1的像素和+所有预测为1的像素和-交集。即

IOU = \frac{diag(confusion)}{sum(confusion, axis=1)+sum(confusion, axis=0)-diag(confusion)}

3. mIOU(mean IOU) 

顾名思义,mIOU就是对所有类别的IOU求均值了。

4. Dice Score(F1 Score)

F_1=2\frac{precison\cdot recall}{precison+recall}

网络模型介绍

  1. FCN
  2. UNet
  3. SegNet
  4. Deeplab(V1 V2)
  5. RefineNet
  6. PSPNet
  7. Deeplab v3
  8. EncNet
  9. ......

1. FCN

https://arxiv.org/abs/1411.4038  (2014年)

FCN是深度学习应用在图像分割的开篇之作,奠定了语义分割的原理基础。

  • Fully Convolution :全链接层转换为卷积层。VGG得到的特征图通过上采样恢复尺寸
  • Transpose Convolution: 上采样的方式,类似于卷积的逆过程,但不是真正的逆,只是形式尺寸上恢复了尺寸,转置卷积的参数通过学习获得。
  • Skip Architecture: 用于融合相同尺度下,卷积层和转置卷积层的feature map, 提高分割的精细程度。

2. UNet

 https://arxiv.org/abs/1505.04597v1 (2015)

UNet的设计就是应用与医学图像的分割。由于医学影像处理中,数据量较少,本文提出的方法有效提升了使用少量数据集训练检测的效果,提出了处理大尺寸图像的有效方法。

UNet的网络架构继承自FCN,并在此基础上做了些改变。提出了Encoder-Decoder概念,实际上就是FCN那个先卷积再上采样的思想。

  • U形结构:完全对称。
  • Skip Architecture
  • Transpose Convolution 

3. SegNet

https://arxiv.org/abs/1511.00561 (2015)

SegNet继承自FCN,在FCN基础上做了些改变,网络在内存上更小。

  • Encoder-Decoder概念:提出编码器-解码器概念,编码就是卷积过程,解码就是上采样过程。
  • Skip Architecture: 使用contact的方式融合链接。
  • Maxpooling-INdices: 又叫Unpooling(反池化),就是把Encoder里池化时的索引存储下来,在Decoder上采样时,按照索引放大尺寸,其他部分填充0,再用conv操作(same conv)填充下稀疏矩阵,平滑下feature map。如下图所示:

preview

从Maxpooling-Indices结构中可以看出,SegNet是具有更少的参数的,所以速度相对较快,但Maxpooling-Indices跟插值之类的算法一样,是不需要学习的参数的,所以没有Transpose Convolution精度高,所以SegNet的效果并不如FCN8s吧。 

4. Deeplab

Deeplab v1: https://arxiv.org/abs/1412.7062 (2014)

Deeplab v2: https://arxiv.org/abs/1606.00915 (2016)

在介绍Deeplab前,先要介绍下空洞卷积(Dilated Convolution)和条件随机场CRF

空洞卷积就是在卷积核中间填充0,或者在输入map上等间隔采样,其计算方式与标准卷积相同。

标准卷积 

空洞卷积 

上图所示即为标准卷积和空洞卷积。那为什么要使用空洞卷积呢?

论文中的说法是,FCN是用传统的CNN那样对图像先卷积再池化,降低图像尺寸同时增大感受野,在上采样扩大图像尺寸。但在减小增大尺寸的过程中,肯定有一些信息丢失了,造成了分割效果粗糙。而dilated conv就是能够不通过池化也能获得较大的感受野的操作。同时,dilated conv通过设置不同的holes,还能得到类似于不同尺度下的特征。(这些理论的东西看看就罢,大部分经验的东西,看似找了个合理的说法而已,但黑匣子还是黑匣子,这种说法很难在深度学习上推而广之) 

条件随机场

DeepLab:深度卷积网络,多孔卷积 和全连接条件随机场 的图像语义分割 Semantic Image Segmentation with Deep Convolutional Nets, Atro_Taylor Guo-CSDN博客_基于条件随机场的图像语义分割

整体来说,Deeplab做了两件事情:

  • 去掉了最后两个Pooling层,改用Dilated Convolution来扩大感受野,避免池化带来的信息损失。
  • 对于模型得到的heatmap, 考虑到图像中分割边缘的先验知识,如梯度变化,颜色等,使用条件随机场CRF精修heatmap, 进一步优化分割精度。

5. RefineNet

RefineNet: https://arxiv.org/pdf/1611.06612.pdf  (2016)

UNet的变种,使用Encoder-Decoder结构。其中Encoder使用ResNet101, Decoder使用RefineNet结构。

上图是网络的整体架构。RefineNet block 的作用就是把不同分辨率的特征图进行融合。最左边一栏使用的是ResNet,先把pretrained ResNet 按特征图的分辨率分成四个ResNet blocks,然后向右把四个blocks 分别作为4 个path 通过RefineNet block 进行融合,最后得到一个refined feature map(接softmax 层,再双线性插值输出)。除了RefineNet-4,所有的RefineNet block 都是二输入的,用于融合不同level 做refine,而单输入的RefineNet-4 可以看作是先对ResNet 的一个task adaptation。

这里写图片描述

上图是refineNet的结构细节。具体如下:

  • RCU:是从残差网络中提取出来的单元结构
  • Multi-resolution fusion:是先对多输入的特征图都用一个卷积层进行自适应(都化到最小的特征图的尺寸大小),再上采样,最后做element-wise 的相加。如果是像RefineNet-4 的单输入block 这一部分就不用了。
  • Chained residual pooling:卷积层作为之后加权求和的权重,relu 对接下来池化的有效性很重要,而且使得模型对学习率的变化没这么敏感。这个链式结构能从很大范围区域上获取背景context。另外,这个结构中大量使用了identity mapping 这样的连接,无论长距离或者短距离的,这样的结构允许梯度从一个block 直接向其他任一block 传播
  • Output convolutions:输出前再加一个RCU。

 6. PSPNet

[论文笔记] PSPNet:Pyramid Scene Parsing Network - 知乎

7. Deeplab V3 

..... 

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

【学习笔记】语义分割综述 的相关文章

  • C++多态虚函数实现原理,对象和虚函数表的内存布局

    基本概念 我们知道C 43 43 动态多态是用虚函数实现的 xff0c 而虚函数的实现方式虽说C 43 43 标准没有要求 xff0c 但是基本都是用虚函数表实现的 xff08 编译器决定 xff09 所以我们有必要了解一下虚函数表的实现原
  • C++ STL中递归锁与普通锁的区别

    在多线程编程中 xff0c 保护共享资源的访问很重要 xff0c 为了实现这个目标 xff0c C 43 43 标准库 xff08 STL xff09 中提供了多种锁 xff0c 如std mutex和std recursive mutex
  • VS+Qt开发环境

    VS Qt下载 VS下载 xff1a https visualstudio microsoft com zh hans vs Qt下载安装 xff1a https www bilibili com video BV1gx4y1M7cM VS
  • windows下使用ShiftMediaProject编译调试FFmpeg

    为什么要编译FFmpeg xff1f 定制模块调试源码 windows下编译 推荐项目ShiftMediaProject FFmpeg 平时总是看到一些人说windows下编译FFmpeg很麻烦 xff0c 这时候我就都是微微一笑 xff0
  • RTSP分析

    RTSP使用TCP来发送控制命令 xff08 OPTIONS DESCRIBE SETUP PLAY xff09 xff0c 因为TCP提供可靠有序的数据传输 xff0c 而且TCP还提供错误检测和纠正 RTSP的报文格式可以参考HTTP的
  • RTP分析

    参考 RTP xff08 A Transport Protocol for Real Time Applications 实时传输协议 xff0c rfc3550 xff09 RTP Payload Format for H 264 Vid
  • VS链接器工具错误 LNK2019:无法解析的外部符号

    常见的问题 以下是一些导致 LNK2019 的常见问题 xff1a 未链接的对象文件或包含符号定义的库 在 Visual Studio 中 xff0c 验证包含定义源代码文件是生成 xff0c 分别链接为项目的一部分 在命令行中 xff0c
  • FFmpeg合并视频流与音频流

    mux h ifndef MUX H define MUX H ifdef cplusplus extern 34 C 34 endif include 34 common h 34 include 34 encode h 34 typed
  • 解决电脑同时使用有线网上内网,无线网上外网的冲突

    由于内网有网络限制 xff08 限制娱乐等 xff09 xff0c 所以肯定要用外网 xff08 无线网卡 xff09 但是有的网站只能用内网访问 xff0c 比如gitlab xff0c oa等 我电脑刚开始连接了wifi后上不了gitl
  • Python斗鱼直播间自动发弹幕脚本

    工具 xff1a Python xff0c Chrome浏览器 因为不会用短信验证码登录 xff0c 所以使用QQ帐号登录 xff0c 必须要斗鱼帐号绑定QQ号 难点主要是帧的切换 查找元素可以通过chrome浏览器鼠标指向该元素 xff0
  • Qt+FFmpeg录屏录音

    欢迎加QQ群309798848交流C C 43 43 linux Qt 音视频 OpenCV 源码 xff1a Qt 43 FFmpeg录屏录音 NanaRecorder 之前的录屏项目ScreenCapture存在音视频同步问题 xff0
  • Qt源码分析(一)

    欢迎加QQ群309798848交流C C 43 43 linux Qt 音视频 OpenCV 源码面前 xff0c 了无秘密 阅读源码能帮助我们理解实现原理 xff0c 然后更灵活的运用 接下来我用VS2015调试Qt5 9源码 首先提一下
  • python实现批量提取图片中文字的小工具

    要实现批量提取图片中的文字 xff0c 我们可以使用Python的pytesseract和Pillow库 pytesseract是一个OCR xff08 Optical Character Recognition xff0c 光学字符识别
  • 在虚拟机与wsl中编译内核,并启用kasan

    linux内核编译 虚拟机编译自己的内核WSL编译自己的内核测试kasan 想学习一下kasan的相关配置 xff0c 但kasan是内核中的相关配置 xff0c 开启得编译内核 xff0c 本文使用虚拟机与wsl两种方式来编译内核启动ka
  • mac时间机器删除旧备份

    查 span class token function sudo span tmutil listlocalsnapshots 删除 span class token function sudo span tmutil deleteloca
  • Linux的ssh服务

    Linux中真机与虚拟机的连接 1 先修改虚拟机的IP xff0c 在虚拟机中输入命令 xff1a nm connection editor 2 选中已存在的System eth0 xff0c 选择Delete 然后点击Add xff0c
  • 51单片机——控制步进电机加速、减速及反转

    加速 xff1a include lt reg52 h gt define uchar unsigned char define uint unsigned int define MotorData P1 uchar phasecw 4 6
  • 【安装教程】——Linux安装opencv

    安装教程 Linux安装opencv 一 安装相关软件包二 获取Source三 安装OpenCV 未完待续 一 安装相关软件包 安装相关软件包 打开终端 xff0c 安装以下软件包 sudo apt install build span c
  • 请教:linux下的/opt目录是做什么用的?

    请教 linux下的 opt目录是做什么用的 蛋疼YMG 浏览 4934 次 发布于2014 10 24 13 35 荒漠探险 答题闯关 好礼连连 最佳答案 opt 主机额外安装软件所摆放的目录 默认是空的 一般安装软件的时候 xff0c
  • kali里装java

    1 下载最新的JAVA JDK jdk 8u91 linux x64 2 解压缩文件并移动至 opt tar xzvf jdk 8u91 linux x64 tar gz mv jdk1 8 0 91 opt cd opt jdk1 8 0

随机推荐

  • ffmpeg--tcp

    TCP代码分析 xff1a include 34 avformat h 34 include 34 libavutil avassert h 34 include 34 libavutil parseutils h 34 include 3
  • GO调用ffmpeg动态库

    package main cgo CFLAGS I usr local ffmpeg include cgo LDFLAGS L usr local ffmpeg lib lavformat include 34 libavformat a
  • ftp上传文件时出现 550 Permission denied,不是用户权限问题

    查了半天 xff0c 发现是因为服务器已经有同名的文件了 xff0c 所以无法上传 xff0c 上传文件名改成不重复的就可以了
  • Ubuntu16.04解决登录闪退问题

    Ubuntu16 04解决登录闪退问题 夏哈哈 64 64 2020 07 21 08 42 46 637 收藏 1 分类专栏 xff1a 程序开发 Ubuntu装机 文章标签 xff1a 深度学习 版权 问题 xff1a Ubuntu16
  • syntax error at or near “.“

    SQL select t id t name t sex t age t address t phone from user where id 61 1 Cause org postgresql util PSQLException ERR
  • ubuntu编译安装opencv4.5.1(C++)

    1 在https github com opencv opencv上下载opencv源码 包括opencv4 5 1和opencv contrib4 5 1 也可以不用 xff0c 其中opencv是主体 xff0c opencv cont
  • Pytorch自定义CNN网络实现猫狗分类

    数据集下载地址 xff1a https www microsoft com en us download confirmation aspx id 61 54765 Dogs vs Cats 猫狗大战 来源Kaggle上的一个竞赛题 xff
  • yolov5训练自己的数据集

    yolo系列在目标检测领域的地位就不用说了 xff0c github上有pytorch实现的训练yolov5的代码 xff0c 本文将用自己的数据去训练一个yolov5的模型 参考代码地址 https github com ultralyt
  • pytorch用自己数据训练VGG16

    一 VGG16的介绍 VGG16是一个很经典的特征提取网络 xff0c 原来的模型是在1000个类别中的训练出来的 xff0c 所以一般都直接拿来把最后的分类数量改掉 xff0c 只训练最后的分类层去适应自己的任务 xff08 又叫迁移学习
  • mmdetection v2.x模型训练与测试

    因为工作关系 xff0c 接触到了mmdetection 它是商汤科技和香港中文大学开源的一款基于pytorch底层的目标检测工具箱 xff0c 隶属于mmlab项目 mmdetection 2 7文件结构 其中configs文件夹下为网络
  • Pytorch用自己的数据训练ResNet

    一 ResNet算法介绍 残差神经网络 ResNet 是由微软研究院的何恺明等人提出的 ResNet 在2015 年的ILSVRC中取得了冠军 通过实验 xff0c ResNet随着网络层不断的加深 xff0c 模型的准确率先是不断的提高
  • 新装Ubuntu系统基本环境安装配置(conda)

    Ubuntu系统用conda来配置深度学习环境 1 配置显卡驱动 查看显卡驱动 nvidia smi 如果是这个命令没有反应 xff0c 就是没有显卡驱动 xff0c 这个时候要先安装显卡驱动 然后再安装cuda xff0c 在这个图中 x
  • Python源码加密与Pytorch模型加密

    0 前言 深度学习领域 xff0c 常常用python写代码 xff0c 而且是建立在一些开源框架之上 xff0c 如pytorch 在实际的项目部署中 xff0c 也有用conda环境和python代码去部署服务器 xff0c 在这个时候
  • Paddle-Lite终端部署深度学习模型流程

    Paddle Lite是飞桨基于Paddle Mobile全新升级推出的端侧推理引擎 xff0c 在多硬件 多平台以及硬件混合调度的支持上更加完备 xff0c 为包括手机在内的端侧场景的AI应用提供高效轻量的推理能力 xff0c 有效解决手
  • nohup: failed to run command `java': No such file or directory

    问题描述 xff1a 平台研发项目 xff0c ActiveQM做消息队列 xff0c zookeeper做集群 xff0c zkui做可视化服务管理 xff0c skynet是引擎服务 xff0c skynet下面有一个xmanager是
  • 【原理篇】一文读懂Faster RCNN

    0 Faster RCNN概述 论文地址 xff1a https arxiv org pdf 1506 01497 pdf Faster R CNN源自2016年发表在cs CV上的论文 Faster R CNN Towards Real
  • 【原理篇】一文读懂Mask RCNN

    Mask RCNN 何凯明大神的经典论文之一 xff0c 是一个实例分割算法 xff0c 正如文中所说 xff0c Mask RCNN是一个简单 灵活 通用的框架 xff0c 该框架主要作用是实例分割 xff0c 目标检测 xff0c 以及
  • 【原理篇】一文读懂FPN(Feature Pyramid Networks)

    论文 xff1a feature pyramid networks for object detection 论文链接 xff1a https arxiv org abs 1612 03144 这篇论文是CVPR2017年的文章 xff0c
  • pytorch用voc分割数据集训练FCN

    语义分割是对图像中的每一个像素进行分类 xff0c 从而完成图像分割的过程 分割主要用于医学图像领域和无人驾驶领域 和其他算法一样 xff0c 图像分割发展过程也经历了传统算法到深度学习算法的转变 xff0c 传统的分割算法包括阈值分割 分
  • 【学习笔记】语义分割综述

    语义分割就是图像分割 xff0c 是图像像素级的分类 xff0c 即给图像的每一个像素点分类 与之临近的一个概念叫实例分割 xff0c 实例分割就是语义分割 43 目标检测 语义分割只能分割出所有同类的像素 xff0c 目标检测把不同的个体