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.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

SpringBoot+Vue3整合SSE实现实时消息推送功能

《SpringBoot+Vue3整合SSE实现实时消息推送功能》在日常开发中,我们经常需要实现实时消息推送的功能,这篇文章将基于SpringBoot和Vue3来简单实现一个入门级的例子,下面小编就和大... 目录前言先大概介绍下SSE后端实现(SpringBoot)前端实现(vue3)1. 数据类型定义2.

SQL 注入攻击(SQL Injection)原理、利用方式与防御策略深度解析

《SQL注入攻击(SQLInjection)原理、利用方式与防御策略深度解析》本文将从SQL注入的基本原理、攻击方式、常见利用手法,到企业级防御方案进行全面讲解,以帮助开发者和安全人员更系统地理解... 目录一、前言二、SQL 注入攻击的基本概念三、SQL 注入常见类型分析1. 基于错误回显的注入(Erro

C#借助Spire.XLS for .NET实现Excel工作表自动化样式设置

《C#借助Spire.XLSfor.NET实现Excel工作表自动化样式设置》作为C#开发者,我们经常需要处理Excel文件,本文将深入探讨如何利用C#代码,借助强大的Spire.XLSfor.N... 目录为什么需要自动化工作表样式使用 Spire.XLS for .NET 实现工作表整体样式设置样式配置

Java枚举类型深度详解

《Java枚举类型深度详解》Java的枚举类型(enum)是一种强大的工具,它不仅可以让你的代码更简洁、可读,而且通过类型安全、常量集合、方法重写和接口实现等特性,使得枚举在很多场景下都非常有用,本文... 目录前言1. enum关键字的使用:定义枚举类型什么是枚举类型?如何定义枚举类型?使用枚举类型:2.

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同