计算机视觉算法——语义分割网络总结

  • 计算机视觉算法——语义分割网络总结
    • 1. FCN
      • 1.1 关键知识点——网络结构及特点
      • 1.2 关键知识点——转置卷积
      • 1.3 关键知识点——语义分割评价指标
    • 2. DeepLab
      • 2.1 DeepLab V1
        • 2.1.1 关键知识点——网络结构及特点
        • 2.1.2 关键知识点——膨胀卷积
      • 2.2 DeepLab V2
        • 2.2.1 关键知识点——网络结构及特点
        • 2.2.2 关键知识点——ASPP(Atrous Spatial Pyramid Pooling)
      • 2.3 DeepLab V3
        • 2.3.1 网络结构及特点
    • 3. U-Net
      • 3.1 关键知识点——网络结构及特点

计算机视觉算法——语义分割网络总结

我关注的B站Up主霹雳吧啦Wz又更新了图像分割相关的学习视频,之前跟着Up主已经学习了
计算机视觉算法——图像分类网络总结
计算机视觉算法——目标检测网络总结
两方面知识,图像分割同样也是计算机视觉中非常重要的的一部分,这篇博客就是跟着Up主学习的一个学习笔记,中间会补充一些我的个人理解,想要完整学习的读者建议还是跟着原视频学习一遍,会更有收获的。

1. FCN

FCN发表于2015年CVPR,论文全称为《Fully Convolutional Networks for Semantic Segmentation》是首个端对端的针对像素级预测的全卷积网络

1.1 关键知识点——网络结构及特点

FCN网络结构如下图所示,是通过将VGG16网络最后三层的全连接网络替换为全卷积网络,将网络最后的输出也由分类结果变化成一张热力图,而这张热力图通过上采样最终就能获得我们需要的分割结果:
具体的网络结构一共有三种,分别是FCN-32s、FCN-16s和FCN-8s,如下图所示,分别指的是选取不同的特征层分别进行32倍、16倍和8倍上采样得到:

在论文的实验结果中,由于FCN-8s融合(特征层相加)更多的特征信息,因此它的结果是最好的,如下图所示:

1.2 关键知识点——转置卷积

转置卷积是Transposed Convolution的直译,又可以称为fractionally-strided convolution或者deconvolution,FCN网络中上采样的部分就是使用的转置卷积。说先对于上采样,我们知道常见的有最近邻插值、双线性插值等,如下图就是双线性插值的结果:
这样的插值方法是固定的,是不可学习的,而转置卷积也是卷积,其kernel是可以学习的,转置卷积的具体步骤如下:
(1)在输入特征图元素间填充stride−1\text{stride}-1stride−1行和列;
(2)在输入特征图四周填充kernelsize−padding−1\text{kernelsize}-\text{padding}-1kernelsize−padding−1行和列;
(3)将卷积核参数上下、左右翻转;
(4)做正常卷积运算;
经过转置卷积后特征图大小变为:Hout =(Hin −1)×stride [0]−2×padding [0]+kernelsize [0]Wout =(Win −1)×stride[1] −2×padding [1]+kernelsize[1] \begin{aligned} H_{\text {out }} &=\left(H_{\text {in }}-1\right) \times \text { stride }[0]-2 \times \text { padding }[0]+\text { kernelsize }[0] \\ W_{\text {out }} &=\left(W_{\text {in }}-1\right) \times \text { stride[1] }-2 \times \text { padding }[1]+\text { kernelsize[1] } \end{aligned} Hout ​Wout ​​=(Hin ​−1)× stride [0]−2× padding [0]+ kernelsize [0]=(Win ​−1)× stride[1] −2× padding [1]+ kernelsize[1] ​如下图就是stride=2,kernelsize=3,padding=1\text{stride}=2,\text{kernelsize}=3,\text{padding}=1stride=2,kernelsize=3,padding=1的情况:
读者看到这里可能有两个问题:(1)为什么叫做转置卷积呢?(2)为什么要对卷积核参数进行上下、左右翻转呢?这里我们通过一个实际例子来分析,我们从普通的卷积过程开始,如下图所示

我们定义卷积符号为∗*∗,那么该过程可以写为:

我们将起写为等效矩阵的形式,即输出特征图各个元素都等于输入特征图与某个等效矩阵相乘的结果,而这个等效矩阵就是由卷积的Kernel平移和填充而来,我们用符号×××表示这个过程,如下所示:
等效矩阵的方式又可以进一步通过矩阵的相乘的方式表达,其中符号@@@表示矩阵乘法:

以上我们将一个1×161×161×16维的矩阵通过与16×416×416×4的矩阵相乘变成了1×41×41×4维的矩阵,这个降维过程是不可逆的,但是我们可以通过将1×41×41×4维的矩阵乘以16×416×416×4的矩阵的转置得到一个新的1∗161*161∗16的矩阵,如下所示:该过程可以类似地转换为等效矩阵的方式表达:
最后我们再将等效矩阵的形式转化为卷积的形式,那么就得到了转置卷积的结果:

如下图所示:

从上面的流程中可以看到,对于同一个卷积核,如果是转置卷积就需要先对卷积核进行上下、左右翻转,然后再进行普通卷积,得到的才是正确的转置卷积的结果,而为什么称为转置卷积应该也和上述步骤中的转置过程有关,也进一步说明转置卷积并不是卷积的逆运算

1.3 关键知识点——语义分割评价指标

这里介绍常见的三种语义分割评价指标,其中nijn_{ij}nij​表示类别iii被预测成类别jjj的像素个数,nclsn_{cls}ncls​表示目标类别个数(包含背景),ti=∑jnijt_{i}=\sum_{j} n_{i j}ti​=∑j​nij​表示类别iii的总像素个数:
(1)Pixel Accuracy(Global Accuracy)∑inii∑iti\frac{\sum_{i} n_{i i}}{\sum_{i} t_{i}} ∑i​ti​∑i​nii​​表示的就是预测正确的像素和总像素个数的比。
(2)Mean Accuracy1ncls⋅∑iniiti\frac{1}{n_{c l s}} \cdot \sum_{i} \frac{n_{i i}}{t_{i}} ncls​1​⋅i∑​ti​nii​​表示的是每个类别预测正确的像素和属于该类别像素的比,最后再根据类别求平均的值。
(3)Mean IoU1ncls⋅∑niiti+∑jnji−nu\frac{1}{n_{c l s}} \cdot \sum \frac{n_{i i}}{t_{i}+\sum_{j} n_{j i}-n_{u}} ncls​1​⋅∑ti​+∑j​nji​−nu​nii​​表示的是每个类别IoU,最后根据类别求平均的值。这里的IoU和目标检测中IoU定义基本上是一致的,就是目标检测结果与对应真值的面积交集比上面积并集。Mean IoU是在论文最常见的指标之一。

2. DeepLab

DeepLab一共有三个系列,分别是Deep Lab V1、V2、V3,下面分别介绍

2.1 DeepLab V1

DeepLab V1发表于2014年的CVPR,论文全称为《Semantic Image Segmentation with Deep Convolutional Nets and Fully Connnected CRFs》,论文引言中提出,将Deep Convolutional Neural Network用于语义分割任务上主要存在两个难点分别是Signal SamplingSpatial Insensitivity,其中前者指的是网络的下采样部分会使得图像的分辨率降低,后者指的是空间不敏感的问题(语义分割是需要空间敏感的,对于同一物体的不同观察需要结果不同),针对这两个问题作者分别提出了膨胀卷积Fully-Connected Conditional Random Field两个解决方案。

2.1.1 关键知识点——网络结构及特点

DeepLab V1网络结构和FCN其实差别不大,都是有VGG16网络改进升级而来,具体的网络结构我们在V2和V3时再做进一步介绍。
DeepLab V1网络的特点是:
(1)速度更快,主要是采用了空洞卷积原因,但是Fully-Connected Conditional Random Field仍然比较耗时;
(2)准确率更高,如下图所示:

在对比中Deep Lab的几个参数
CRF指的是Conditional Random Field模块,该模块在升级到DeepLab V3后就不再使用了,因此就不在此进行介绍。
MSc指的是Multi-Scale模块,将输入以及前四层最大池化后的特征层通过两层MLP和网络最后的输出特征concatenate到一起,该模块能稍微提高mean IoU指标,但是会增大网络参数数量,因此作者不建议使用,在此我们也不进行过多介绍。
LargeFOV模块其实指的就是对膨胀卷积的应用,前面说到,DeepLab网络和FCN网络一样同样是在VGG16网络上的基础上将最后三层全连接层转化为卷积层,作者指出者三层卷基层中的第一层原本使用的大小为7×77\times77×7的4096个卷积核,但是这成为了网络计算的瓶颈,因此作者将该层更换为了大小为4×44\times44×4的膨胀卷积,其作用是在不降低网络的mean IoU指标的前提下,降低网络的参数数量以及加快网络的训练速度,具体实现后文详解。

2.1.2 关键知识点——膨胀卷积

膨胀卷积又名空洞卷积,如下就是膨胀因子为2的膨胀卷积的示意图,其实就是卷积本身是带有空洞的:

其作用主要是可以:
(1) 增大感受野,所谓增大感受野我们可以通过感受野的计算公式实际计算下,感受野计算公式如下:rl=rl−1+(kl−1)×jl−1r_l = r_{l-1}+(k_l-1)\times j_{l-1}rl​=rl−1​+(kl​−1)×jl−1​其中rlr_lrl​为第lll层感受野,klk_lkl​为第lll层卷积大小,jlj_ljl​为第lll层卷积步长,我们使步长为111,大小为3×33\times 33×3的普通卷积叠加三层,那么我们的感受野就是7×77\times 77×7,如果我们使用同样补偿为111,大小为3×33\times 33×3,膨胀因子分别1、2、31、2、31、2、3的膨胀卷积叠加三层,那么感受野就变成了13×1313\times 1313×13,也就是实现了在相同参数下获得更大的感受野。
(2)保持原输入特征图大小,在语义分割网络中,为了增大感受野,我们通常会使用Max Pooling层对特征层进行下采样,这样就会导致特征的一些细节的丢失,如果不使用Max Pooling层,又会使得网络的感受野过小,而此时我们就可以使用膨胀卷积,在不使用Max Pooling层改变特征图大小前提下增加感受野。
在使用膨胀卷积中经常会遇到一个Gridding Effect的问题,如下图所示

上图中
(a)从左到右分别是使用3×33 \times 33×3的卷积,膨胀因子固定为222的三个卷积叠加使用后的对感受野的影响,从结果看会发现这样的卷积对感受野的影响并不是连续的,而是仅仅利用到中间一部分像素。
(b)同样是三个3×33\times33×3卷积,但是膨胀因此依次是1、2、31、2、31、2、3,这种情况下感受野和第一种情况是相同的,但是其使用到了感受野中所有的像素。
在《Understanding Convolution for Semantic Segmentation》一文中提出了“卷积中两个非零元素的最大距离计算公式”、“膨胀系数设置为锯齿状分布”,“膨胀系数公约数不能大于一”等一系列避免Gridding Effect的建议,这里感兴趣的读者可以去看下论文,在此不再赘述。

2.2 DeepLab V2

2.2.1 关键知识点——网络结构及特点

DeepLab V2提出于2016年CVPR,论文全称为《DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs》,在论文引言中作者同样提出了将DCNN应用于语义分割任务的问题以及解决方案:
(1)分辨率被降低:将最后几个Max Pooling层的stride设置成1(分辨率不变),配合使用膨胀卷积;
(2)目标的多尺度问题:将图像缩放到多个尺度分别通过网络进行推荐,然后将多个结果进行融合,这样做计算量较大,为了解决该问题,DeepLab V2提出了ASPP模块;
(3)DCNN的不变形会降低定位精度:和DeepLab V1类似通过CRFs解决,不过DeepLab V1是使用的是Fully Connected Pairwise CRF,相对于DeepLab V1中的Fully Connected CRF更高效;
DeepLab V2的网络除了以上优化方法外,还将BackBone更换为了ResNet,综上网络特点主要是
(1)速度更快;
(2)准确率更高;
(3)模型结构简单,通过DCNN与CRF联级;

2.2.2 关键知识点——ASPP(Atrous Spatial Pyramid Pooling)

ASPP模块结构如下:

简单而言,就是类似于Google Net将网络的Feature Map同时送入不同的分支进行卷积,然后再将卷积后的结果进行Concatenate,这里不同分支之间的区别主要是膨胀卷积的膨胀系数不同,在DeepLab V2中一共提出了两种配置,分别是ASPP-S(膨胀系数分别是2,4,6,8)以及ASPP-L(膨胀系数分别是6,12,18,24),他们的结果对比如下:


可以看到,ASPP-L相对于单通道的LargeFOV还是有较大提升的,具体的LargeFOV结构和ASPP结构对比如下:

2.3 DeepLab V3

2.3.1 网络结构及特点

DeepLab V3发表于2017年的CVPR,网络原论文名为《Rethinking Atrous Convolution for Semantic Image Segmentation》,相对于DeepLab V2主要的不同点是
(1)引入了Multi-Grid结构;
(2)改进了ASPP结构;
(3)移除了CRFs后处理模块;
在论文中,作者提出了获得多尺度信息的四种方式如下图所示,

其中第一种就是将训练数据进行上下采样;第二种就是采用类似于U-Net的网络结构;第三种是通过膨胀卷积进行级联,也就是本文提出的Cascaded Model;第四种是采用ASPP 模块,也就是本文提出的ASPP Model;

Cascaded Model结构如下图所示:

其中Block1-Block3位原始ResNet网络中的结构,而Block4-Blcok7与ResNet的Block结构相同,但是卷积均为膨胀卷积,每一层的膨胀系数还不一样,这就是Multi-Grid结构,我们还注意到图中由rate这个参数,这里的rate与每一层膨胀卷积的膨胀系数相乘后的值才是该卷积层最后的膨胀系数,我们可以看到在Block4-Blcok7中rate是2,4,6,16依次递增的。

ASPP Model结构如下图所示:

相对于DeepLab V2中的ASPP模块,这里的ASPP模块中还添加了一个全局池化的通道(Image Pooling),除此之外,后面还添加了1×11\times11×1的卷积层(包括BN层和ReLU层)进行进一步的融合。

3. U-Net

UNet发表于2015年的MICCAI,原论文名为《U-Net: Convolutional Networks for Biomedical Image Segmentation》,UNet主要应用与医学影像领域,在我之前接触到的降噪算法中,U-Net也是一个非常有效的结构。

3.1 关键知识点——网络结构及特点

UNet网络结构如下图所示:

U-Net的网络结构是清晰明了的,我们注意一下几点:
(1)U-Net主要由两部分构成,下采样的部分作用主要是提取特征,原论文称为contracting path,上采样的部分主要作用是回复尺寸和特征融合,原论文称为expensive path;
(2)在原始的U-Net中,作者为了减小计算量有一个crop操作,导致最终网络输出的分割结果和原图大小不一致,而目前主流的实现方式是不进行crop操作的;
(3)这里上采样都是通过转置卷积实现的,转置卷积的原理参看FPN章节的介绍;

计算机视觉算法——语义分割网络总结相关推荐

  1. Fast-SCNN:多分支结构共享低级特征的语义分割网络

    介绍一篇 BMVC 2019 语义分割论文 Fast-SCNN:Fast Semantic Segmentation Network,谷歌学术显示该文已有62次引用. 论文:https://arxiv ...

  2. 复杂背景下计算机视觉模型害虫识别的比较研究(像素语义分割网络SegNet)

    Abstract 农业被认为是世界各国的经济基础,新技术的发展有助于提高收获效率.自动驾驶汽车在农场用于播种.收获和施用农药等任务.然而,任何一个种植园的主要问题之一是害虫和疾病的鉴定,这对害虫控制和 ...

  3. CVPR2020:4D点云语义分割网络(SpSequenceNet)

    CVPR2020:4D点云语义分割网络(SpSequenceNet) SpSequenceNet: Semantic Segmentation Network on 4D Point Clouds 论 ...

  4. 一块GPU就能训练语义分割网络,百度PaddlePaddle是如何优化的?

    [引言]显存不足是训练语义分割网络常常遇见的问题,而显存是GPU计算中的稀缺资源.百度深度学习框架PaddlePaddle中的显存优化,不仅可以让研究人员在相同成本的计算设备上训练更大的模型,还可以在 ...

  5. 北航、旷视联合,打造最强实时语义分割网络

    来源:AI科技评论 编辑:Camel 导语:MSFNet在Cityscapes测试集上达到77.1%mIoU/41FPS(注意是1024*2048),在Camvid测试集上达到75.4 mIoU/97 ...

  6. 计算机视觉算法——目标检测网络总结

    计算机视觉算法--目标检测网络总结 计算机视觉算法--目标检测网络总结 1. RCNN系列 1.1 RCNN 1.1.1 关键知识点--网络结构及特点 1.1.2 关键知识点--RCNN存在的问题 1 ...

  7. 实时语义分割网络 BiSeNet(附代码解读)

    实时语义分割网络 BiSeNet BiSeNet Contributions BackGround BiSeNet 结构 Loss function Experimental Results 采用数据 ...

  8. 【论文阅读】SCAttNet:具有空间和通道注意机制的高分辨率遥感图像语义分割网络

    [论文阅读]SCAttNet:具有空间和通道注意机制的高分辨率遥感图像语义分割网络 文章目录 [论文阅读]SCAttNet:具有空间和通道注意机制的高分辨率遥感图像语义分割网络 一.总体介绍 二.概述 ...

  9. Fast-SCNN语义分割网络详解

    文章目录 一.简要介绍 二.主要贡献 三.相关背景 (1)编码器-解码器架构 (2)多分支结构 (3)Fast-SCNN 四.网络架构 (1)学习下采样模块 (2)全局特征提取器 (3)特征融合模块 ...

最新文章

  1. linux top 命令信息解释
  2. 推荐系统笔记(内容推荐)
  3. nacos+openfeign服务提供和服务消费远程调用代码简单实例2
  4. atom 安装 xdebug 调试 php 代码
  5. 控制`Actor`朝向,运动 Learn Unreal Engine (with C++)
  6. 蜂窝注册表和永久存储
  7. Python学习之路和隐藏特征
  8. Qt笔记-QCryptographicHash摘要算法调用(MD5,SHA等)
  9. python 函数中的面试题
  10. maven ${path.separator}
  11. LAMP环境搭建过程中出现的问题——基于VM虚拟CentOS-5.6
  12. 别奢望大数据会为你做这10件事儿!
  13. 德国黑客使用租用的计算机资源攻击散列算法
  14. 虚拟服务器的密码忘记了,忘记虚拟密码
  15. Spring Boot@Component注解下的类无法@Autowired的问题
  16. DAS、NAS、SAN、IPSAN、iSCSI-SAN及IDE、SAS、SCSI、iSCSI简介
  17. 力扣刷题 DAY_79 贪心
  18. win32 API函数大全
  19. weblogic10 配置 domian
  20. 各种算法的时间复杂度

热门文章

  1. php5渗透,ThinkPHP的一些渗透方式
  2. Spark RDD与Partion
  3. 将自定义程序写入U盘引导区,并在真机执行
  4. ARM学习笔记--day10
  5. 安卓6.0权限处理在项目中的实践
  6. Eclipse faceted project metadata file could not be read
  7. 【CNC——第9.1篇】使用Setup引导程序整定步进电机(开环步进电机整定方式之1)
  8. Logstash Grok详解
  9. Druid基本概念及架构介绍
  10. JavaEE知识点总结详细版(一)计算机是如何进行工作的