DAB-Net:用于实时语义分割的深度不对称瓶颈层

2024-03-22 08:30

本文主要是介绍DAB-Net:用于实时语义分割的深度不对称瓶颈层,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要:

提出一种新的深度非对称瓶颈(DAB)模块,该模块有效采用非对称卷积扩张卷积来构建瓶颈层。由DAB模块组成的DAB-Net,生成了足够的接受域,密集的利用了上下文信息。

Citycapes测试集上实现70.1%的miou,一张FGTX1080Ti上速度为104FPS。代码地址:https://github.com/Reagan1311/DABNet

1、介绍

[16.18.19.23]已成功地提高了语义分割的实时性,同时也牺牲了准确性。[3,4,5,12,31]已证明了扩张卷积的可用性,扩张卷积可以在保持参数的同时增加感受野。另一种有效减少参数的方式是深度可分离卷积(ds-Conv),它具有独立计算跨通道和空间性,但是简单的将标准卷积替换为ds-conv会导致性能大幅下降,因为ds-conv大大降低了参数,常常导致次优问题。所以,本文将两者结合,构成DAB模块。

本文主要贡献为:

1)提出DAB结构,能同时提取局部和上下文信息,大大降低了参数;

2)DAB-Net不含上采样层,参数比最先进的语义分割少,且有相当的准确性和推理速度;

3)DAB_Net,在1080ti 上 512*1024图104FPS,参数0.76M,Citycapes上miou=0.701。

2、相关工作

ENet [18]是第一个实时设计的网络,它减少大量的卷积以减少滤波器;

ICNet [34]提出一种包含多分辨率分支的图像级联网络;

ERFNet [20]使用残差连接和分解卷积保持效率,同时保持准确率;

ESPNet [16]引入一个高效的空间金字塔(ESP),给速度和性能都带来很大改进;

BiSeNet [30]提出空间信息和上下文信息结合的方法。

扩张卷积。膨胀卷积 [12]在标准卷积中每个像素之间插入零点,在不增加参数的情况下,得到一个较大的有效接受域。在DeepLab系列 [4,5,6]中,引入一个无源控件金字塔池(ASPP)模块,该模块采用多个并行的不同膨胀率卷积收集多尺度信息。DenseASPP [29]将一组膨胀卷积层连接起来,生成密集的多尺度特征表示。

卷积因子分解。将一个标准卷积分解为几个步骤降低计算成本和内存,这在轻量级CNN模型中得到广泛应用。Inception [24,25,26]在保持接收域大小的同时,使用几个小尺寸的卷积来代替大卷积核。Xceprion [7]和MobilNetV2 [22]提出反向残差和线性瓶颈。ShuffleNet [32]将点卷积和通道混洗结合,使得不同通道能够进行信息通信。

3、网络结构

本节中,先介绍DAB模块 ,然后基于DAB设计DABNet。

3.1、深度非对称瓶颈-DAB模块

受ResNet [10]瓶颈设计和ERFNet [20]中因式分解的启发,结合两者优点设计了DAB模块。

a,b,c分别为ResNet、ERFNet、DAB结构。1)首先将通道数减少一半,然后通过点卷积恢复至原始值。2)两个分支结构,为1*N,N*1可分离卷积组合,右分支增加膨胀因子(结合多尺度信息)。3)之后1*1卷积,恢复至原通道大小。4)最后残差连接。

ResNet [10],深层次的卷积网络可以增加感受野,并且提取更复杂的特征。双分支,优秀的网络都会用多尺度信息,但多尺度信息的有效提取是个难题。左分支提取当前信息,右分支利用膨胀卷积提供更大的感受野,使用深度可分离卷积降低计算量。卷积分解降低参数量。膨胀卷积:增加感受野,但当膨胀率增加,也必须实现更多padding维持特征图大小尺度,这导致膨胀卷积计算量大,所以,本文只在深度可分离卷积上进行膨胀卷积。左分支为当前信息,右分支为上下文信息。

ENet [18]使用PRelu激活,浅层网络上PRelu性能优于Relu。[22]中提出1*1卷积后增加激活函数会损失精度,故1*1卷积后不激活。

3.2、DABNet结构设计

首先,使用3*3卷积提取初始特征,然后采取同ENet [18]相似的下采样模块,该模块连接3*3卷积和步长为2的maxpooling。

下采样操作降低输出特征图的尺寸,同时起到增加感受野以提取更多上下文信息的作用,而特征图分辨率的降低常导致信息丢失。因此,本文只做三次将采样,最后特征图为输入的1/8。一般是5次下采样,为输入的1/32。更多的,借鉴ESPNet V2 [17]连接输入与每个下采样模块,减少信息损失。

DAB模块,使用几个连续的DAB模块来提取稠密特征,第一、二个DAB模块分别含连续3、6个DAB结构,左分支膨胀率为2,右分支膨胀率依次为4,4,8,8,16,16,通过这样逐步增加感受野。

设计选择。DABNet只做三次下采样。不含解码结构,以减少计算量。

4、实验

实验中,batch_size设置为8,动量因子0.9,衰减1e-4,SGD优化。初始学习率4.5e-2,幂0.9。迭代1000次。数据增强采用随机翻转、建军治、随机比例尺。随机比例包含0.75、1.0、1.25、1.5、1.75、2.0。最后剪裁至固定尺寸进行训练。

膨胀率设计。在第二个DAB结构后,逐步增加膨胀率。{4,4,8,8,16,16},以固定膨胀率4作为对比。固定rate=4比基线底2.3%。文献 [28]表明大的膨胀率更适合本网络。

解码器。采用ERFNet的解码器结构作对比,用反卷积层做上采样。上表中DABNet-ERFdecoder,指标提升0.3%,但速度下降至58.6 FPS。所以,本文中上采样层是非必须的。

上下文模块。PSPNet [33]是一个分类模型,采用空间金字塔pooling SPP ,通过在不同分辨率的特征图上提取当前、全局上下文信息。为探索捕获上下文能力,本文构造一个带有SPP头的DABNet变体,成为DABNet-SPP。比基线低0.5%的准确率,参数增加4.2%,模型速度降低32FPS。DAB模块提取上下文特征比SPP要好。

推理速度。3.1中,膨胀卷积增加计算量,我们探索高效膨胀卷积。(a)去掉DABNet中所有膨胀卷积,(b)在所有DABNet中,第一层增加rate=2的膨胀率。即使降低膨胀率或去除所有膨胀卷积,FPS几乎没什么变化(从104.2到104.5)。但是,当对标准卷积应用膨胀卷积时,速度明显下降,从104.2下降到85.6。结果表明:膨胀卷积对推理速度有显著影响,但应用于深度卷积时,几乎没有不良影响。

这篇关于DAB-Net:用于实时语义分割的深度不对称瓶颈层的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/834938

相关文章

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结