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

相关文章

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

Mysql中isnull,ifnull,nullif的用法及语义详解

《Mysql中isnull,ifnull,nullif的用法及语义详解》MySQL中ISNULL判断表达式是否为NULL,IFNULL替换NULL值为指定值,NULLIF在表达式相等时返回NULL,用... 目录mysql中isnull,ifnull,nullif的用法1. ISNULL(expr) → 判

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解