DeepLab V1学习笔记

news2025/7/13 18:43:25

DeepLab V1

  • 摘要
  • 相关的工作
  • 遇到的问题和解决的方法
    • 信号下采样
    • 空间不变性(spatial insensitivity/invariance)
    • 论文的优点(贡献)
  • 网络的模型
    • 空洞卷积
    • CRF
    • 多尺度预测
  • 模型总结
  • 实验结果

Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs论文地址 : Deep Lab V1
ICLR 2015收录

摘要

本文结合了深度卷及网络(DCNN)和CRF两个已经比较成熟的模块,在实验过程中发现单纯的使用DCNN的效果不是那么的丝滑(DCNN对于高层语义信息拥有很好的能力,但是对于低级的位置信息不足。),做语义分割不够那么精准,根本原因是DCNN的高级特征的平移不变形。
我们通过将DCNN的最后一层和CRF结合,解决了定位准确率低的问题。

相关的工作

遇到的问题和解决的方法

信号下采样

信号下采样 :在DCNN中重复最大池化和下采样带来的分辨率下降问题,分辨率的下降会丢失细节。max-pooling会降低特征图的分辨率,而利用反卷积等上采样方法会增加时空复杂度,也比较粗糙,因此利用空洞卷积来扩大感受野,相当于下采样-卷积-上采样的过程被一次空洞卷积所取代。空洞卷积可以扩展感受野,获取更多的上下文信息。

解决方法 : 利用带孔的卷积(空洞卷积)

空间不变性(spatial insensitivity/invariance)

空间不敏感(invariance) :

  • 以获取图像中物体为核心的决策,必然需要空间不变性/不敏感。换句话说,对于同一张图片进行空间变换(如平移、旋转),其图片分类结果是不变的。
  • 但对于图像分割等,对于一张图片进行空间变换后,其结果是改变的。

解决方法 : 使用Dense CRF解决空间不变性的问题

论文的优点(贡献)

  • 速度:带atrous算法的DCNN可以保持8FPS的速度,全连接CRF平均推断需要0.5s
  • 准确:在PASCAL语义分割挑战中获得了第一(当时)的成绩,准确率超过第二好的方法7.2%
  • 简单:DeepLab是由两个非常成熟的模块(DCNN和CRFs)级联而成。

网络的模型

空洞卷积

CRF

参考资料:

  • 参考资料1
  • 参考资料2
  • 推导过程

CRF的引入:

  • CRF在传统图像处理上主要做平滑处理,但对于CNN来说,short-range CRFs可能会起到反作用,因为我们的目标是恢复局部信息,而不是进一步平滑图像。
  • 引入fully connected CRF来解决这个问题,考虑全局的信息。

后边DeepLab V3就不再用了,暂时先鸽子。

多尺度预测

在这里插入图片描述

类似于FCN的多尺度的拼接,不过最后的结果类似于Unet是将所有的拼接起来了不是FCN的相加。
实现:

在输入图片与前四个max pooling后添加MLP(多层感知机,包括3 * 3 * 128以及1 * 1 * 128),得到预测结果。这四个预测结果与最终模型输出拼接(concatenate)到一起,相当于多了128*5=640个channel。

总结:虽然最后的结果略有提升,但是相对于添加CRF还是有差距

模型总结

主要是对原有VGG网络进行了一些变换:

  • 将原先的全连接层通过卷基层来实现。
  • VGG网络中原有5个max pooling,先将后两个max pooling去除(看别的博客中说,其实没有去除,只是将max pooling的stride从2变为1),相当于只进行了8倍下采样。将后两个max pooling后的普通卷基层,改为使用空洞卷积。
  • 为了控制视野域(同时减少计算量),对于VGG中的第一个fully connected convlution layer,即77的卷基层,使用33或4*4的卷积来替代。计算时间减少了2-3倍。

在这里插入图片描述

  • 把最后的全连接层FC6、7、8改造成卷积层
  • pool4的stride由2变为1,则紧接着的conv5_1, conv5_2和conv5_3中hole size为2。
  • 接着pool5由2变为1, 则后面的fc6中hole size为4。
  • fc7,8为标准卷积
  • 由于Hole算法让feature map更加dense,所以网络直接用差值升采样就能获得很好的结果,而不用去学习升采样的参数了(FCN中采用了de-convolution)

其他训练信息
损失函数:交叉熵之和。
训练数据label:对原始Ground Truth进行下采样8倍,得到训练label。
预测数据label:对预测结果进行双线性上采样8倍,得到预测结果。

在这里插入图片描述
使用dilated conv,还避开了层层上采样,直接用bilinear interpolation(双线性插值)恢复到原状,然后进行fully-connected conditional random fields 通过邻域之间的锐化,得到最终分割结果。

实验结果

模型的整体结构:
在这里插入图片描述

测试细节:

项目设置
数据集PASCAL VOC 2012 segmentation benchmark
DCNN模型权重采用预训练的VGG16
DCNN损失函数交叉熵
训练器SGD,batch=20
学习率初始为0.001,最后的分类层是0.01。每2000次迭代乘0.1
权重0.9的动量, 0.0005的衰减

最后的实验结果进行对比,发现最下边的那个对比当前主流的FCN-8S或者TTI—16都优秀很多在这里插入图片描述

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

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

相关文章

[附源码]java毕业设计乒乓球俱乐部管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【光学】基于Matlab模拟干涉条纹图

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

亿级万物互联新时代的物联网消息中间件EMQX调研

简介 最近去某餐厅吃饭,进门时智能门自动打开房门同时来一句"欢迎光临",然后伸手到门口的洗手台,水管无接触自动出水,端起菜盘走向台子选择自己喜欢的菜品,最后将菜盘放在智能结账机上,智能结账…

代码随想录算法训练营第三天|LeetCode 203.移除链表元素 、707.设计链表 、206.反转链表

LeetCode 203.移除链表元素 题目链接:203.移除链表元素 链表的定义: // 单链表 struct ListNode {int val; // 节点上存储的元素ListNode *next; // 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数 };ListNode(i…

数据结构实验教程-第一套

1.在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A的左孩子的平衡因子为1,右孩子的平衡因子为0,则应作_型调整以使其平衡。 A.LL B.LR C.RL D.RR答案为a,错选了c。 平衡因子 左子…

model.py篇

model.py篇 目录如下: 引言找LeNet5网络结构书写代码测试结果函数解释 引言 卷积主要用于特征的提取,而model.py则是为了从输入信息中筛选出我们需要的信息。 我们在阅读完论文后,对我们需要的模型进行搭建,下以LeNet5的model…

子域名访问计数(哈希表、字符串、索引)

力扣地址:力扣 网站域名 "discuss.leetcode.com" 由多个子域名组成。顶级域名为 "com" ,二级域名为 "leetcode.com" ,最低一级为 "discuss.leetcode.com" 。当访问域名 "discuss.leetcode.com&…

【Struts2】idea快速搭建struts2框架

文章目录什么是SSH框架?Struts2框架1、struts2的环境搭建1.1 创建web项目(maven),导入struts2核心jar包1.2 配置web.xml(过滤器),是struts2的入口,先进入1.3 创建核心配置文件struts…

力扣(LeetCode)13. 罗马数字转整数(C++)

模拟 罗马数字和掰手指数数的区别在于,IV/IXIV/IXIV/IX 这类倒着数数的,和阿拉伯数字最大的区别在于 555 的 10k10^k10k 倍 k∈Nk\isin Nk∈N ,需要被表示出来。所以除了记录 I/X/C/MI/X/C/MI/X/C/M ——1/10/100/10001/10/100/10001/10/100…

五种IO模型

文章目录什么是IO操作系统的IO五种IO模型阻塞IO非阻塞IO多路转接IO(复用IO)信号驱动IO异步IO同步异步什么是IO IO,即input/output,IO模型即输入输出模型,而比较常见且听说的便是磁盘IO,网络IO. 按照冯诺依曼结构的来看,假设我们把运算器、控制器、存储器三个设备看做一个整体…

Kruskal算法求最小生成树

输入样例: 4 5 1 2 1 1 3 2 1 4 3 2 3 2 3 4 4输出样例: 6适用于稀疏图,快; 实现步骤: 1.将所有边将权重从小到大排序;sort;O(mlogm) 2.枚举每条边a,b;权…

RabbitMQ的 AMQP协议都是些什么内容呢

之前也讲述过关于 RabbitMQ 的相关内容,比如他们的配置,以及 RabbitMQ 整合 SpringBoot 使用,而且自己使用过之后,就会在自己的简历上面写上自己使用 RabbitMQ 实现了什么功能,但是这就会导致,有些面试官就…

QPainter、QPen 、QBrush(概念)

Qt中的三大绘画类: QPainter :进行绘画QPaintDevice :提供画图设备,是一个二维的抽象(是所有可绘制对象的基类)QPaintEngine :提供了画家用于绘制到不同类型的设备上的界面QPainter(画家) QPainter 提供高度优化的功能来完成 GUI …

Presto 聚合中groupBy分组的实现

一.前言 本文只要探索在Presto中groupby是怎么实现的。在Preso中,groupby的分组主要通过对数据Hash的数值比较进行分组,其中有2种情况,一直是仅有一个groupby字段而且字段是Bigint类型的,此场景下会使用BigintGroupByHash来实现分…

Spring boot使用ProGuard实现代码混淆

目录参考一、 ProGuard简介二、混淆配置要点三、快速开始方案一 配置文件新增proguard.cfg配置插件打包方案二 pom中定义配置参考 Spring boot使用ProGuard实现代码混淆 SpringBoot 玩一玩代码混淆,防止反编译代码泄露 代码混淆常见于安卓的apk安装文件, 服务端的…

11月千言最新评测推荐,覆盖中文对话、视频语义理解、可信AI等前沿方向

千言数据集是百度联合中国计算机学会、中国中文信息学会共同发起的数据共建计划,千言针对每个自然语言处理问题,均收集和整理多个开源数据集,进行统一的处理并提供统一的测评方式,帮助加速模型的研发。截至目前,千言评…

[附源码]java毕业设计上海景宏不锈钢厨房设备报修系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

云原生系列 【轻松入门容器基础操作】

✅作者简介: CSDN内容合伙人,全栈领域新星创作者,阿里云专家博主,华为云云 享专家博主,掘金后端评审团成员 💕前言: 最近云原生领域热火朝天,那么云原生是什么?何为云原生…

数据分析 | Pandas 200道练习题 进阶篇(3)

文章目录DA21 大佬用户成就值比例DA22 牛客网用户最高的正确率DA23 统计牛客网用户的名字长度DA24 去掉信息不全的用户DA25 修补缺失的用户数据DA26 解决牛客网用户重复的数据总结:❤️ 作者简介:大家好我是小鱼干儿♛是一个热爱编程、热爱算法的大三学生…

生信步骤|MAFFT结合HMMER进行多序列比对和基于隐马模型的基因搜索

蛋白质都是由相似的小型结构域组成的。如果我们有若干个已知的蛋白序列,那我们就可以根据这些蛋白序列比较其含有的保守域,寻找在蛋白数据库中上是否也有一样保守域的蛋白。而后根据统计学模型,将显著性较高的蛋白序列预测为同一类基因家族蛋…