【Deep Learning】DeepLab

article/2025/10/23 17:27:27

【论文】SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS

    前段时间学习了DeepLab,这里花时间记录一下,感谢几位小伙伴的分享。DeepLab的主体结构事实上是参照VGG改造的,它的几个优点:首先是速度快(hole算法),另外是精确(CRF),然后是网络结构简单(采用了DCNN和CRF结合的形式)。下面简单记录一下DeepLab的结构和思想,第一部分介绍DCNN的结构创新,第二部分介绍Hole算法。

【1.1】Dense spatial score evaluation

    1. 把VGG-16的全连接层改成卷积层

        把最后的全连接层改造成卷积层,整个网络相当于变成了一个全卷积网络,这个方法不详细叙述,不了解的童鞋可以看看FCN或者SEGNET。但是原本的VGG有5个pooling层,这样的话在pooling5输出的的feature非常稀疏,即把原尺寸缩小了32倍(2^5,即整体的stride=32,计算公式为:strides(i)=stride(1)*stride(2)*…*stride(i-1)),这恰恰是全卷积网络的通病,所以我们需要得到更dense的图像。

    2. 为了让获得的图像更为dense,将pooling4、5的stride由2变为1,如下图:


        这样的话尺寸就缩小为原本的8倍,但是这样的话之后节点的感受野就会发生变化。

        这里有个感受野的计算公式:

            RF=((RF-1)*stride)+fsize

        感受野需要层后往前推,也就是“当前这一层的节点往前看能看到多少前几层的节点”。公式中假设当前层的RF=1,stride是上一层的步长,fsize是filter的尺寸,padding不影响感受野大小。这是一个递推公式。详细解释这个问题,请看下面的图:


        最左边的图就是VGG原来的结构,可以看到最下方的层往前看,能看到4个最上面层的节点,标号从左到右分别是{1,2,3,4},{3,4,5,6},{5,6,7,8},右边是将pooling的stride变为1之后的图,显而易见,最下方的节点的RF减少,只能看到最上面层的三个节点。

        为了解决这个问题,作者提出了Hole算法。

    3. Hole算法

        为了保证感受野不发生变化,某一层的stride由2变为1以后,后面的层需要采用hole算法。具体来讲就是将连续的连接关系是根据hole size大小变成skip连接的。pool4的stride由2变为1,则紧接着的conv5_1, conv5_2和conv5_3中hole size为2。接着pool5由2变为1, 则后面的fc6中hole size为4。同时由于Hole算法让feature map更加dense,所以网络直接用差值升采样就能获得很好的结果,而不用去学习升采样的参数了(FCN中采用了de-convolution)。

        则网络结构变为:


        要解释这个问题还是回到刚才那个简单一些的问题:


        我们在下方的卷积层中应用Hole算法,可以看到最下方多了两个神经元,但是每个神经元感受野都没有变化,都能看到最上层的4个神经元。运用hole算法之后实际的kernel_size有个计算公式:ke = k + (k-1)(r-1),这里的r是rate,其实就是input stride,一个意思。


    4. 对VGG16进行finetune

        将原来分类的1000类改为21类,因为要分割出21种物体,同时把损失函数改为交叉熵的形式。即对于样本集,p为真实分布,q为预测分布,则有:


        这和逻辑回归的损失函数是一样的,只是将2类拓展到多类。不明白的童鞋可以去看看LR。

【1.2】Controlling the network’s respective field size

    1. 对FC6的卷积核直接降采样

        VGG16 的感受野是224*224(文中写的是这个,但是我觉得应该是212*212),把网络改为全卷积的话是404*404(fc6的卷积核大小是7*7)。但是这样做的话,这部分就会成计算速度提升的瓶颈,左右又提出一个做法,对第一层全连接层的卷积核做简单的降采样到4*4(3*3), 计算速度变快,改成4*4的时候RF变为308,有兴趣的可以算一算。

    2. 把FC6输出的feature map从4096减少到1024

        以上两步都加快了运算速度。


【2.1】在升采样之后加入CRF(条件随机场)精细化边缘

    越深的网络分类越精确,但是因为不变性和大感受野导致定位不精确。此处加入CRF精细化边缘信息。


    下图中第一行是在输入softmax之前做CRF得到的结果,下面一行是softmax的输出经过CRF得到的结果。


    简单介绍一下CRF。我们用下面的公式来表示输出结果的整体能量,或者说混沌程度,称为能量函数(energy function):


    前一项代表像素的内聚程度,其中,其中P(xi)就是DCNN输出的score map在i这个像素上,它的真实标签的概率。

    后一项代表相邻节点的相关程度


    其中二元能量项描述像素点与像素点之间的关系,鼓励相似像素分配相同的标签,而相差较大的像素分配不同标签,而这个“距离”的定义与颜色值和实际相对距离有关。二元势函数描述的是每一个像素与其他所有像素的关系,所以叫“全连接”。

    对每一个类(现在有21类)求解E(x),当取到min E(x)时像素值最稳定。

【2.2】Multi-scale prediction


    参考FCN的做法,将INPUT,pooling1,pooling2,pooling3,pooling4的输出结果信息传到sofftmax,因为随着层数的加深,一些细节还是会被丢失。具体的做法是在这几个地方加入多层感知机,其实就是3*3*128和1*1*128两个卷积层,最后再融合到softmax。

【3】实验对比

    最后就是一个实验的对比,可以看到DEEPLAB+MSC+CRF+LARGEFOV的效果是最好的。

    下图是deeplab在pascal voc上的mean IoU对比。


    下图是检验边界分割的准确率,在边界设置一个窄带(白色部分),叫做trimap(文中原话:We compute the mean IOU for those pixels that
are located within a narrow band (called trimap) of ‘void’ labels.),在trimap中计算mean IoU,然后加大trimap的宽度,再计算准确率,得到曲线。


    下图是DeepLab在PASCAL VOC 2012的测试集上的准确率对比。



http://chatgpt.dhexx.cn/article/d3RPiO55.shtml

相关文章

Deeplab笔记

一、Deeplab v2 对应论文是 DeepLab: Semantic Image Segmentiation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs Deeplab 是谷歌在FCN的基础上搞出来的。FCN为了得到一个更加dense的score map,将一张500x500的输入图像&#…

deeplab-v3+原理详解

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 目录 一、deeplab-v3提出原因与简单介绍 二、deeplab-v3网络结构图 三、Encoder 1、Backbone(主干网络&#xff09…

深度学习 | MATLAB Deep Learning Toolbox Deeper Networks 创建

深度学习 | MATLAB Deep Learning Toolbox Deeper Networks 目录 深度学习 | MATLAB Deep Learning Toolbox Deeper NetworksDeeper Networks创建类比深度网络深度记忆原理深度学习层输入层卷积和全连接层序列层激活层归一化、丢弃和裁剪层池化和去池化层组合层输出层 参考资料…

深度学习(11)——DeepLab v1

DeepLab v1 DeepLab 由谷歌团队提出的,至今有了四个版本,也就是v1-v4。其结合了深度卷积神经网络(DCNNs)和概率图模型。 在论文《Semantic image segmentation with deep convolutional nets and fully connected CRFs》中提出&…

改进 DeepLabV3+

网络整体结构图 CFF结构图 import torch import torch.nn as nn import torch.nn.functional as F from nets.xception import xception from nets.mobilenetv2 import mobilenetv2class MobileNetV2(nn.Module):def __init__(self, downsample_factor8, pretrainedTrue):supe…

DeepFaceLab

DeepFaceLab从半脸(Half Face)到全脸(Full Face)再到整脸(Whole Face),脸部替换的区域愈来愈大,适用的范围也越来越广,效果也越来越震撼。当然很多人已经不满足与单纯换脸…

DeepLab系列总结

DeepLab系列总结 DeepLab系列DeepLab V1DeepLab V2DeepLab V3DeepLab V3 DeepLab系列 DeepLab网络是由Liang-Chieh Chen(下文以大神指代)与google团队提出来的,是一个专门用来处理语义分割的模型。目前推出了4个(或者说3.5个&…

DeepLab系列学习

DeepLab系列 文章目录 DeepLab系列DeepLabV1简介atrous algorithm利用全卷积增加感受野并加速运算条件随机场CRF实验结果多尺度预测VOC数据集上对比 DeepLabV2主要改进简介模型主体ASPP实验结果 DeepLabV3相应的改进实验 DeepLabV3(DeepLabV3 plus)相应改进整体结构解码器结构m…

deeplab系列总结(deeplab v1 v2 v3 v3+)

最近花了几天时间把deeplab系列撸了一遍,直观感受是不如当初看RCNN系列来的激动啊......像RPN这种划时代的改变没有看到--直奔主题。 Deeplab v1&v2 paper: deeplab v1 && deeplab v2 远古版本的deeplab系列,就像RCNN一样&…

我对DeepLab V3的理解(基于V1和V2)

一、概述 1.前言 1.1 DeepLab v1 创新点&#xff1a; 空洞卷积&#xff08;Atrous Conv&#xff09;; <解决编码过程中信号不断被下采样&#xff0c;细节丢失的问题> 全连接条件随机场&#xff08;Fully-connected Conditional Random Field&#xff09;。 <由于co…

deeplab介绍

■ 论文 | Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation ■ 链接 | https://www.paperweekly.site/papers/1676 DeepLab 是结合了深度卷积神经网络&#xff08;DCNNs&#xff09;和概率图模型&#xff08;DenseCRFs&#xff09;的方法…

DeepLab一家

DeepLab是谷歌为了语义分割又做的一系列工作&#xff0c;在多个开源数据集中都取得了不错的成果&#xff0c;DeepLabv1发表于2014年&#xff0c;后于2016、2017、2018分别提出了V2&#xff0c;V3以及V3的版本&#xff0c;在mmsegmentation里面主要集成了V3以及V3的版本&#xf…

深度学习论文精读[13]:Deeplab v3+

Deeplab v3是Deeplab系列最后一个网络结构&#xff0c;也是基于空洞卷积和多尺度系列模型的集大成者。相较于Deeplab v3&#xff0c;v3版本参考了UNet系列网络&#xff0c;对基于空洞卷积的Deeplab网络引入了编解码结构&#xff0c;一定程度上来讲&#xff0c;Deeplab v3是编解…

语义分割网络系列3——DeepLab

DeepLab 1 介绍1.1 背景1.2 Deeplab V1介绍1.3 结构1.4 特点1.4.1 空洞卷积的使用1.4.2 CRF的应用 1.5 DeepLab系列总结 2 代码3 总结参考资料 1 介绍 相比于传统的视觉算法(SIFT或HOG)&#xff0c;Deep-CNN以其end-to-end方式获得了很好的效果。这样的成功部分可以归功于Deep…

DeepLabV3网络简析

论文名称&#xff1a;Rethinking Atrous Convolution for Semantic Image Segmentation 论文下载地址&#xff1a;https://arxiv.org/abs/1706.05587 非官方Pytorch实现代码&#xff1a;pytorch_segmentation/deeplab_v3 视频讲解&#xff1a;https://www.bilibili.com/video/…

DeepLab系列(v1,v2,v3,v3+)总结

U-net: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation 语义分割面临的挑战1. DeepLab v1——《Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs》&#xff08;ICLR 2015&#xff0c;谷歌&#xff09;2. Deep…

一文理解DeepLab V1到DeepLab V3+(超系统、超详细)

文章目录 预备知识空洞卷积 1、DeepLab V11.1 基于VGG模型1.2 总体架构1.2.1 Fully Connected CRF&#xff08;条件随机场&#xff09; 1.3 DeepLab V1模型实验 2、DeepLab V22.1 整体架构2.2 训练策略2.2.1 学习率的调整 3、DeepLab V33.1 cascade形式的DeepLab V33.2 paralle…

微信小程序+SpringBoot接入后台服务,接口数据来自后端

文章底部有个人公众号&#xff1a;小兔教你学编程。主要目的是方便阅读。主要分享一些前后端初中级知识、开发实战案例、问题解决等知识。 前言 前两天开发了一个微信小程序项目&#xff0c;只不过接口数据是自己设置的假数据。然后我就想将这些假数据替换掉。这些数据来自接口…

Python3 - 三天学会微信小程序(Python后端研习)

文章目录 一、day01微信小程序1. 问题2. 环境的搭建2.1 Python环境2.2 小程序环境2.2.1 申请一个微信公众平台2.2.2 保存自己的appid2.2.3 下载开发者工具2.2.4 创建项目 3. 开发小程序3.1 全局配置3.2 组件3.2.1 text3.2.2 view3.2.3 image 3.3 样式3.3.1 4. flex布局5. 实战 …

微信小程序快速搭建

1 1. 申请账号 申请账号 1. 进入小程序注册页根据指引填写信息和提交相应的资料&#xff0c;完成账号申请。 说明&#xff1a; 如果跳转后页面出现错误&#xff0c;请刷新访问。 2. 使用申请的微信公众平台账号登录小程序后台&#xff0c;单击开发 > 开发设置&#xff0c;…