deeplab介绍

■ 论文 | Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

■ 链接 | https://www.paperweekly.site/papers/1676

 

DeepLab 是结合了深度卷积神经网络(DCNNs)和概率图模型(DenseCRFs)的方法。

在实验中发现 DCNNs 做语义分割时精准度不够的问题,根本原因是 DCNNs 的高级特征的平移不变性,即高层次特征映射,根源于重复的池化和下采样。

针对信号下采样或池化降低分辨率,DeepLab 是采用的 atrous(带孔)算法扩展感受野,获取更多的上下文信息。

分类器获取以对象中心的决策是需要空间变换的不变性,这天然地限制了 DCNN 的定位精度,DeepLab 采用完全连接的条件随机场(CRF)提高模型捕获细节的能力。

除空洞卷积和 CRFs 之外,论文使用的 tricks 还有 Multi-Scale features。其实就是 U-Net 和 FPN 的思想,在输入图像和前四个最大池化层的输出上附加了两层的 MLP,第一层是 128 个 3×3 卷积,第二层是 128 个 1×1 卷积。最终输出的特征与主干网的最后一层特征图融合,特征图增加 5×128=640 个通道。

实验表示多尺度有助于提升预测结果,但是效果不如 CRF 明显。

论文模型基于 VGG16,在 Titan GPU 上运行速度达到了 8FPS,全连接 CRF 平均推断需要 0.5s ,在 PASCAL VOC-2012 达到 71.6% IOU accuracy。

DeepLabv2

DeepLabv2 是相对于 DeepLabv1 基础上的优化。DeepLabv1 在三个方向努力解决,但是问题依然存在:特征分辨率的降低、物体存在多尺度,DCNN 的平移不变性。

因 DCNN 连续池化和下采样造成分辨率降低,DeepLabv2 在最后几个最大池化层中去除下采样,取而代之的是使用空洞卷积,以更高的采样密度计算特征映射。

物体存在多尺度的问题,DeepLabv1 中是用多个 MLP 结合多尺度特征解决,虽然可以提供系统的性能,但是增加特征计算量和存储空间。

论文受到 Spatial Pyramid Pooling (SPP) 的启发,提出了一个类似的结构,在给定的输入上以不同采样率的空洞卷积并行采样,相当于以多个比例捕捉图像的上下文,称为 ASPP (atrous spatial pyramid pooling) 模块。

DCNN 的分类不变形影响空间精度。DeepLabv2 是采样全连接的 CRF 在增强模型捕捉细节的能力。

论文模型基于 ResNet,在 NVidia Titan X GPU 上运行速度达到了 8FPS,全连接 CRF 平均推断需要 0.5s ,在耗时方面和 DeepLabv1 无差异,但在 PASCAL VOC-2012 达到 79.7 mIOU。

DeepLabv3

好的论文不止说明怎么做,还告诉为什么。DeepLab 延续到 DeepLabv3 系列,依然是在空洞卷积做文章,但是探讨不同结构的方向。

DeepLabv3 论文比较了多种捕获多尺度信息的方式:

1. Image Pyramid:将输入图片放缩成不同比例,分别应用在 DCNN 上,将预测结果融合得到最终输出。

2. Encoder-Decoder:利用 Encoder 阶段的多尺度特征,运用到 Decoder 阶段上恢复空间分辨率,代表工作有 FCN、SegNet、PSPNet 等工。

3. Deeper w. Atrous Convolution:在原始模型的顶端增加额外的模块,例如 DenseCRF,捕捉像素间长距离信息。

4. Spatial Pyramid Pooling:空间金字塔池化具有不同采样率和多种视野的卷积核,能够以多尺度捕捉对象。

DeepLabv1-v2 都是使用带孔卷积提取密集特征来进行语义分割。但是为了解决分割对象的多尺度问题,DeepLabv3 设计采用多比例的带孔卷积级联或并行来捕获多尺度背景。

此外,DeepLabv3 将修改之前提出的带孔空间金字塔池化模块,该模块用于探索多尺度卷积特征,将全局背景基于图像层次进行编码获得特征,取得 state-of-art 性能,在 PASCAL VOC-2012 达到 86.9 mIOU。

DeepLabv3+

DeepLabv3+ 架构

DeepLabv3+ 继续在模型的架构上作文章,为了融合多尺度信息,引入语义分割常用的 encoder-decoder。在 encoder-decoder 架构中,引入可任意控制编码器提取特征的分辨率,通过空洞卷积平衡精度和耗时。

在语义分割任务中采用 Xception 模型,在 ASPP 和解码模块使用 depthwise separable convolution,提高编码器-解码器网络的运行速率和健壮性,在 PASCAL VOC 2012 数据集上取得新的 state-of-art 表现,89.0 mIOU。

Xception 改进

Entry flow 保持不变,但是添加了更多的 Middle flow。所有的 max pooling 被 depthwise separable convolutions 替代。在每个 3x3 depthwise convolution 之外,增加了 batch normalization 和 ReLU。

实验

论文提出的模型在主干网络 ResNet-101 和 Xception均进行验证。两种方式均在 ImageNet 预训练。其中 Xception 预训练过程中,使用 50 个 GPU,每个 GPU batch size=32,分辨率 299x299。Xception 相比 ResNet-101,在 Top-1 和 Top-5 分别提高 0.75% 和 0.29%。

在实验过程中,分别考虑 train OS: The output stride used during training、eval OS: The output stride used during evaluation、Decoder: Employing the proposed decoder structure、MS: Multi-scale inputs during evaluation、 Flip: Adding left-right flipped inputs 等各种情况。

另外使用 depthwise separable convolution,使用 Pretraining on COCO 和 Pretraining on JFT,在这些 tricks 辅助下,PASCAL VOC 2012 test set 达到惊人的 89.0%,取得新的 state-of-the-art 水平。

结论

从 DeepLabv1-v4 系列看,空洞卷积必不可少。从 DeepLabv3 开始去掉 CRFs。

Github 目前还未有公布的 DeepLabv3,但是有网友的复现版本。DeepLabv3+ 更是没有源代码,复现起来估计有些难度。

DeepLabv3 复现:

https://github.com/NanqingD/DeepLabV3-Tensorflow

DeepLabv1-v4 没有用很多 tricks,都是从网络架构中调整,主要是如何结合多尺度信息和空洞卷积。从FCN,ASPP,Encoder-Decoder with Atrous Conv,每一个想法看上去在别的都实现过,但是论文综合起来就是有效。

Deeplabv1,v2 耗时为 8fps,从 Deeplabv3 开始,论文已经不说运行时间的问题,是否模型越来越慢了。

MobileNetV2 已经实现 Deeplabv3,并努力在 MobileNetV2 中复现 DeepLabv3+ 版本。

参考文献

[1] Semantic image segmentation with deep convolutional nets and fully connected CRFs

[2] DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs

[3] Rethinking Atrous Convolution for Semantic Image Segmentation

[4] Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

03-08
### DeepLab 图像分割模型使用教程 #### 1. 模型概述 DeepLab 是一种用于语义图像分割的强大工具,通过引入空洞卷积(Atrous Convolution)、多尺度上下文聚合以及空间金字塔池化模块来提升性能。该系列经历了多个版本的发展,从 Deeplab v1 到最新的 Deeplab v3+ 不断改进结构设计以提高精度和效率[^2]。 #### 2. 安装环境准备 为了能够顺利运行并训练 DeepLab 模型,在本地计算机上需安装必要的依赖库。推荐采用 Anaconda 创建虚拟环境,并按照官方文档中的说明完成 TensorFlow 或 PyTorch 的安装配置工作。对于具体操作步骤可以参考 GitHub 上的相关项目页面提供的指导信息[^1]。 #### 3. 数据集获取与预处理 针对特定应用场景选择合适的数据集非常重要。常用公开数据集如 PASCAL VOC、COCO 等可用于初步实验测试;而对于定制化的业务需求,则可能需要自行收集标注图片作为输入素材。在实际应用前还需对原始图像做标准化变换、裁剪缩放等一系列预处理措施以便更好地适应算法框架的要求[^4]。 #### 4. 训练过程详解 利用给定的开源代码仓库 `train-DeepLab` 可快速搭建起基于 Python 和 TensorFlow 实现的 DeepLabV3+/MobileNet 版本实例程序。用户可以根据自身硬件条件调整超参数设置(比如批次大小 Batch Size, 学习率 Learning Rate 等),并通过 TensorBoard 工具实时监控损失函数变化趋势从而优化调参策略。 ```bash # 下载并解压Pascal VOC数据集 wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar tar xf VOCtrainval_11-May-2012.tar # 进入项目目录执行脚本启动训练流程 cd /path/to/train-deeplab/ python deeplab_train.py --dataset_dir=./datasets/pascal_voc_seg \ --model_variant="mobilenet_v2" \ --atrous_rates=6 \ --output_stride=16 \ --train_crop_size="513,513" ``` #### 5. 部署到移动设备 当完成了模型训练之后,如果希望将其应用于移动端应用程序开发当中去的话,那么就需要考虑如何有效地压缩量化权重文件使之能够在资源受限环境下正常运作。这里可以通过 ONNX Runtime 来转换导出经过优化后的 .pt 格式的深度神经网络描述符至 Android 平台之上进行推理计算。 ```python import torch.onnx as onnx from torchvision import models dummy_input = torch.randn(1, 3, 224, 224).cuda() model = models.segmentation.deeplabv3_resnet101(pretrained=True).eval().cuda() onnx.export(model, dummy_input, "deeplabv3.onnx", export_params=True, opset_version=10, do_constant_folding=True, input_names=['input'], output_names=['output']) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值