深度学习之DeepLab系列

1.1 DeepLabv1

  
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。

1.2 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。

1.3 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。

1.4 DeepLabv3+

  
语义分割关注的问题:
  
1、 实例对象多尺度问题。
  
2、 因为深度网络存在stride=2的层,会导致feature分辨率下降,从而导致预测精度降低,而造成的边界信息丢失问题。
  
deeplab V3新设计的aspp结构解决了问题1,deeplab v3+主要目的在于解决问题2。
  
问题2 可以使用空洞卷积替代更多的pooling层来获取分辨率更高的feature。但是feature分辨率更高会极大增加运算量。以deeplab v3使用的resnet101为例,stride=16将造成后面9层feature变大,后面9层的计算量变为原来的2*2=4倍大。stride=8则更为恐怖,后面78层的计算量都会变大很多。
  
解决方案:1、编解码器结构;2 Modified Aligned Xception

在这里插入图片描述

  
在deeplabv3基础上加入解码器。A是aspp结构,其中8x的上采样可以看做是一个解码器。B是编解码结构,它集合了高层和底层的特征。C就是本文采取的结构。
  
方法:
  
(1)Encoder-Decoder with Atrous Convolution

在这里插入图片描述

  
编码器采用deeplabv3。
  
解码器部分:先从低层级选一个feature,将低层级的feature用1 * 1的卷积进行通道压缩(原本为256通道,或者512通道),目的在于减少低层级的比重。作者认为编码器得到的feature具有更丰富的信息,所以编码器的feature应该有更高的比重。 这样做有利于训练。
  
再将编码器的输出上采样,使其分辨率与低层级feature一致。举个例子,如果采用resnet conv2 输出的feature,则这里要* 4上采样。将两种feature连接后,再进行一次3 * 3的卷积(细化作用),然后再次上采样就得到了像素级的预测。后面的实验结果表明这种结构在 stride=16 时既有很高的精度速度又很快。stride=8相对来说只获得了一点点精度的提升,但增加了很多的计算量。
  
(2)Modified Aligned Xception
  
Xception主要采用了deepwish seperable convolution来替换原来的卷积层。简单的说就是这种结构能在更少参数更少计算量的情况下学到同样的信息。这边则是考虑将原来的resnet-101骨架网换成xception。

在这里插入图片描述

  
红色部分为修改
  
更多层:重复8次改为16次(基于MSRA目标检测的工作)。
  
将原来简单的pool层改成了stride为2的deepwish seperable convolution。
  
额外的RELU层和归一化操作添加在每个 3 × 3 depthwise convolution之后(原来只在1 * 1卷积之后)

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、付费专栏及课程。

余额充值