学习记录——BiSeNet V2

BiSeNet V2: Bilateral Network with Guided Aggregation for Real-time Semantic Segmentation

BiSeNet V2:基于引导聚合的双边网络实时语义分割

  摘要在语义分割中,低级细节和高级语义都是必不可少的。然而,为了加快模型推理的速度,目前的方法几乎总是牺牲底层的细节,这导致精度大大降低。我们建议将这些空间细节和范畴语义分开处理,以实现高精度和高效率的实时语义分割。为此,我们提出了一种高效的架构,在速度和精度之间进行了良好的权衡,称为双边分割网络(BiSeNet V2)。该架构包括:(i)一个细节分支,具有宽通道和浅层,用于捕获低级细节并生成高分辨率特征表示;(ii)语义分支,通道窄,层次深,获取高级语义上下文。语义分支是轻量级的,因为它减少了信道容量和快速降采样策略。此外,我们设计了一个引导聚合层来增强相互连接并融合两种类型的特征表示。此外,设计了一种增强训练策略,在不增加推理成本的情况下提高分割性能。广泛的定量和定性评估表明,支持提出的体系结构对一些最先进的实时语义分割方法表现良好。具体来说,对于2,048×1,024输入,我们在cityscape测试集上实现了72.6%的Mean IoU,在一个NVIDIA GeForce GTX 1080 Ti卡上的速度为156 FPS,这比现有方法快得多,但我们实现了更好的分割精度。代码和经过培训的模型将公开提供。

引言

  语义分割是为每个像素分配语义标签的任务。它是计算机视觉中的一个基本问题,有着广泛的应用,包括场景理解(Zhou等人,2019)、自动驾驶(Cordts等人,2016;[c] . Geiger et al ., 2012),人类科学[j] . vol . 14:2004.02147 - v1。2020年4月5日机器交互和视频监控,仅举几例。近年来,随着卷积神经网络(Krizhevsky et al ., 2012)的发展,一系列语义分割方法(Zhao et al ., 2017;Chen et al ., 2017;Yu et al ., 2018b;Chen et al ., 2018;Zhang et al ., 2018a)基于全卷积网络(FCN) (Long et al ., 2015)不断提升了最先进的性能。

  这些方法的高精度依赖于它们的骨干网络。骨干网主要有两种架构:(i)扩展骨干网,去除下采样操作,并对相应的滤波核进行上采样,以保持高分辨率的特征表示(Chen et al ., 2015, 2018;赵等,2017,2018b;Fu et al ., 2019;Yu et al, 2020),如图2 (a)所示。(ii)编码器-解码器主干,采用自顶向下和跳过连接,以恢复解码器部分的高分辨率特征表示(Lin et al, 2017;Peng et al ., 2017;Yu等人,2018b),如图2 (b)所示。然而,这两种架构都是为一般的语义分割任务而设计的,不太关心推理速度和计算成本。在扩展主干中,扩展卷积耗时长,去除下采样操作带来了巨大的计算复杂度和内存占用。编码器-解码器架构中的许多连接对内存访问成本不太友好(Ma et al, 2018)。然而,实时语义分割应用对高效的推理速度提出了要求。
  面对这一需求,基于骨干网、现有方法(Badrinarayanan et al ., 2017;Paszke et al, 2016;赵等,2018a;Romera等人,2018;Mazzini, 2018)主要采用两种方法来加速模型:(i)输入限制。在相同的网络架构下,输入分辨率越小,计算成本越低。为了实现实时推理速度,许多算法(Zhao et al ., 2018a;Romera等人,2018;马志尼、2018;Romera et al, 2018)试图限制输入大小以降低整个计算复杂度;(2)通道修剪。它是一种直接的加速方法,特别是在早期阶段修剪通道以提高推理速度(Badrinarayanan et al ., 2017;Paszke et al, 2016;Chollet, 2017)。虽然这两种方式都能在一定程度上提高推理速度,但它们都牺牲了低级细节和空间容量,导致精度急剧下降。因此,为了同时实现高效率和高精度,开发一种特定的实时语义分割架构具有挑战性和重要性。
  我们观察到,低级细节和高级语义对于语义层都是至关重要的心理状态的任务。在一般的语义分割任务中,深层网络和广义网络同时对这两种信息进行编码。然而,在实时语义分割任务中,我们可以将空间细节和类别语义分开处理,以实现准确率和推理速度之间的权衡。
  为此,我们提出了一种双路径架构,称为双边分割网络(BiSeNet V2),用于实时语义分割。其中一条通道被设计为用宽通道和浅层捕捉空间细节,称为细节分支。另一种通道窄、层次深的分类语义提取方法称为语义分支(Semantic Branch)。语义分支只需要一个大的接受域来捕获语义上下文,而细节信息可以由细节分支提供。因此,语义分支可以用更少的通道和快速下采样策略来实现轻量级。将两种类型的特征表示进行合并,以构建更强、更全面的特征表示。这种概念设计为实时语义分割提供了高效的架构,如图2 ©所示。

  具体而言,在本研究中,我们设计了一个引导聚合层来有效地合并这两种类型的特征。为了在不增加推理复杂性的情况下进一步提高性能,我们提出了一种带有一系列辅助预测头的增强训练策略,这些辅助预测

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是使用 BiSeNet V2 实现图像分割的一个简单示例: 1. 首先,需要准备数据集。可以使用常见的图像分割数据集,如 Cityscapes、PASCAL VOC、ADE20K 等。 2. 然后,需要下载 BiSeNet V2 的预训练模型。可以从官方 Github 仓库下载,链接为 https://github.com/CoinCheung/BiSeNet/tree/v2。 3. 接下来,需要对数据集进行预处理。可以使用常见的图像预处理方法,如裁剪、缩放、旋转、翻转等。此外,还需要将标签图像转换为 one-hot 编码。 4. 然后,需要加载预训练模型,并根据需要进行微调。可以使用 PyTorch 或 TensorFlow 等深度学习框架来实现。 5. 最后,可以使用模型对测试图像进行分割,并将分割结果保存为图像。 下面是一个简单的 Python 代码示例,展示了如何使用 BiSeNet V2 实现图像分割: ```python import torch import torchvision.transforms as transforms from PIL import Image import numpy as np # 加载预训练模型 model = torch.load('path/to/bisenetv2.pt') # 图像预处理 transform = transforms.Compose([ transforms.Resize((512, 512)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载测试图像 image = Image.open('path/to/test_image.jpg') image = transform(image) image = image.unsqueeze(0) # 模型推理 with torch.no_grad(): output = model(image) # 将输出转为 Numpy 数组 output = output.squeeze(0).cpu().numpy() output = np.argmax(output, axis=0) # 将输出保存为图像 output = Image.fromarray(output.astype(np.uint8)) output.save('path/to/output.png') ``` 需要注意的是,上述代码示例仅供参考,实际应用中可能需要根据具体情况进行修改。此外,还需要对数据集、模型参数等进行调整和优化,以实现更好的分割效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chaoy6565

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值