今天阅读这篇2022年ICLR会议上发表的论文,主要是为了学习MobileViT模型,用于YOLO模型主干改造。
一、文献概述
- 作者:Sachin Mehta 和 Mohammad Rastegari。
- 地点:作者所属机构是 Apple。
- 内容简述:
- 提出了一种名为MobileViT的视觉变换器,它是为移动设备设计的轻量级、通用目的的卷积神经网络(CNN)。
- MobileViT旨在结合CNN和ViTs的优势,旨在构建一个轻量级和低延迟的移动视觉任务网络。
- 论文中提到,MobileViT在不同任务和数据集上显著优于CNN和ViT基础的网络架构,比如在ImageNet数据集上,MobileViT的准确率比MobileNetV3(基于CNN)高出3.2%和6.2%。
- 该论文还提到,对于MS-COCO数据集的对象检测任务,MobileViT比MobileNetV3(基于CNN)准确率高5.7%。
- 论文的源代码是开源的,可在GitHub上找到。
二、Introduction部分
讨论了在视觉任务中使用CNNs和ViTs的对比和潜在的改进。
- 文档引用了多位研究人员和他们的工作,例如 Dosovitskiy et al., 2021; Vaswani et al., 2017; Touvron et al., 2021a; Howard et al., 2019; Raffel et al., 2021; Xiao et al., 2021; Wang et al., 2021; Devlin et al., 2018等。
- 内容简述:
- 讨论了自注意力模型,特别是视觉变换器(ViTs),作为卷积神经网络(CNNs)的替代方案来学习视觉表示。
- 指出ViTs使用多头自注意力来学习表示,而CNNs则具有空间归纳偏差,允许它们学习具有少量参数的表示。
- 提到ViTs在某些任务上的性能比轻量级CNNs差,特别是在参数数量受限时。
- 强调了设计轻量级ViT模型的重要性,因为即使对于需要快速反应的任务,ViTs的模型大小和执行速度也是关键因素。
- 讨论了尽管轻量级CNNs在许多移动视觉任务上表现出色,但ViT基于网络在与任务相关的网络集成方面仍然沉重。
- 引述了对混合方法的需求,这种方法结合了CNNs和变换器的优势,以解决ViT模型中的参数数量问题。
-
图示:
- (a) 显示了标准视觉变换器(ViT)的结构图。过程开始于将图像分割成小块,然后通过线性层,接着是位置编码和变换器层,最后通过另一个线性层生成Logits。
- (b) 展示了MobileViT的结构,其中Conv-n×n表示标准的n×n卷积,MV2代表MobileNetV2块。图中用箭头标记了执行下采样的块。
-
图表:
- 图1(Figure 1)标题为“Visual transformers vs. MobileViT”,对标准视觉变换器和MobileViT进行对比。
- 图2(Figure 2)展示了MobileViT与轻量级CNN后端(如MobileNetV1,MobileNetV2,MobileNetV3,MNASNet和MobileViT)相比,在任务级泛化性能方面的优势。图表显示了不同模型在MS-COCO数据集上的性能比较,MobileViT在这里显示了更好的性能。
-
文本内容:
- 简要讨论了视觉变换器(ViTs)和卷积神经网络(CNNs)的混合模型。指出这些混合模型虽然受到关注,但仍然较重,并且对数据增强敏感。例如,去除CutMix数据增强导致ImageNet准确率显著下降。
图片主要展示了MobileViT的设计和优势,以及它与传统CNNs和其他ViTs的性能比较。这些信息用于解释MobileViT如何提高效率,以及它在机器学习和计算机视觉领域的应用。
- 内容简述:
- 讨论了将CNNs和变换器的优势结合起来构建适用于移动视觉任务的模型的问题,强调了在移动设备上实现低延迟至关重要。
- 指出FLOPs(浮点运算次数)不足以表示移动设备上的延迟,因为它忽略了内存访问、并行度和平台特性等推理相关因素。
- 强调优化FLOPs而不是其他因素可能不足以实现低延迟的移动设备性能。
- 本文不是优化FLOPs,而是着重设计轻量级(第3.3节)、通用目的(第4.1节和第4.2节)和低延迟(第4.3节)的移动视觉任务网络。
- 提到MobileViT块结合了CNNs和ViTs的优点,如空间归纳偏见和对数据增强的敏感性较低,能够在张量中有效编码局部和全局信息。
- 描述了MobileViT块如何通过使用变换器替代卷积中的局部处理来实现全局处理,这有助于MobileViT获得类似CNN和ViT的属性。
- 论文还提到,MobileViT在参数数量和简单的训练方法方面都有改进,显示了在移动设备上使用MobileViT作为特征提取器时的性能增益。
这部分内容强调了MobileViT在实现移动视觉任务方面的潜在优势,尤其是在处理速度和计算效率方面。
三、Related Work 部分
这张图片是一篇科学论文的一部分,主要内容包括:
这部分内容说明了MobileViT模型在高效性和性能上的潜在优势,这对于设计适用于移动设备的轻量级、通用目的视觉网络至关重要。
内容主要强调了MobileViT模型的以下特点:
- 性能:MobileViT模型与现有轻量级CNNs相比,在不同的视觉任务(第4.1节和第4.2节)上表现出更好的性能。
- 泛化能力:泛化能力是指模型在训练和评估指标之间的差距。MobileViT即使在使用大量数据增强的情况下,也表现出比CNNs更好的泛化能力,这意味着它能够更好地预测未见过数据集上的表现。这是因为与传统的ViT变体不同,MobileViT即使在进行大量数据增强时也表现出更好的泛化能力(参见图3)。
- 健壮性:一个好的模型应该对超参数(例如,数据增强和L2正则化)健壮,因为调整这些超参数既耗时又耗资源。与大多数基于ViT的模型不同,MobileViT模型在进行基本数据增强的同时对L2正则化的敏感度较低(第C节)。
四、MOBILEViT:一个轻量级的变换器
这部分文档详细介绍了MobileViT的架构和工作原理,特别是它如何处理图像数据并在保持轻量级架构的同时提高性能。
-
内容简述:
- 解释了标准视觉变换器(ViT)模型,并提到了一个改进的版本,即MobileViT。
- MobileViT的核心思想是通过使用变换器作为卷积来隐式地整合全局表示(如空间偏差)并简化训练。
- 讨论了MobileViT架构的细节,它旨在模拟局部和全局信息。
-
MobileViT块:
- 描述了MobileViT块的设计,它利用标准的n×n卷积层来编码局部空间信息,同时使用逐点卷积将张量投影到一个更高的维度空间。
- MobileViT的目标是在保持有效感受野的同时,模拟长距离的非局部依赖性。
-
图4:
- 展示了MobileViT块内部的像素如何看到其他像素,使用红色和蓝色像素来示例。红色像素通过变换器注意到蓝色像素(位于相应的其他补丁中)。
这部分文档进一步解释了MobileViT的结构和优化,讨论了MobileViT是如何实现轻量级变换器的。
-
文本内容:
- 讨论了在不同的空间层次上使用MobileViT,包括为什么它是轻量级的,以及它是如何克服标准ViT模型的一些局限性的。
- 解释了MobileViT如何利用转换器在保持CNN中固有的图像特定归纳偏置的同时学习全局表示。
- 指出MobileViT通过结合卷积和转换器以一种允许轻量级和窄MobileViT模型设计的方式使用这些属性,相比于更深的ViT模型如DeiT,它更轻量级。
-
方程式:
- 方程式(1)展示了MobileViT如何将输入的张量通过转换器处理,说明了它是如何在保持每个补丁内部像素顺序的同时失去像素间的空间顺序的。
-
图5:
- 展示了多尺度采样与标准采样器的对比,以及它们在训练效率方面的差异。
- 图5a对比了标准采样器和多尺度采样器的架构。
- 图5b展示了使用多尺度采样器相对于标准采样器在模型更新和每个时代所需时间上的训练效率。
-
MobileViT的具体使用:
- 说明了MobileViT使用了不同的空间尺度(),表明这些配置可以加快MobileViT模型的速度,使其更小并且对参数更少敏感。
这部分文档详细解释了MobileViT模型的计算效率和架构设计,以及它如何能够在减少参数的同时保持或提高性能。
这部分内容强调了MobileViT在训练效率和性能方面相比于其他模型的优势,以及它是如何通过在训练过程中考虑不同空间分辨率来实现这些优势的。
五、实验结果
这部分强调了MobileViT在大小和性能方面的高效性,表明它非常适合在模型大小和计算效率至关重要的任务中使用。文中还指出,由于MobileViT在优化上的健壮性和简便性,它们很容易被应用到新的任务和数据集上。
这部分说明了MobileViT作为一个有效的骨干网络,在多个任务上都表现出色,并且具有高效的推理时间。这些结果表明,MobileViT能够在保持模型轻量级的同时提供强大的性能和通用性。
-
第4.2节:MobileViT作为通用骨干网络
- 文章讨论了MobileViT在两个广泛研究的移动视觉任务上的通用性:物体检测(4.2.1)和语义分割(4.2.2)。
-
4.2.1小节:移动对象检测
- 实现细节:MobileViT被整合到单个对象检测骨干网络(SSD)中,并且替代了原来SSD中的卷积,新的网络称为SSDLite。
- 结果:在相同的输入分辨率320×320下,使用MobileViT作为骨干网络的SSDLite在性能上优于其他轻量级CNN模型,并且模型尺寸减小了1.8倍。
-
4.2.2小节:移动语义分割
- 实现细节:MobileViT被整合到DeepLabv3中,并在PASCAL VOC 2012数据集上进行了微调。
- 结果:DeepLabv3配合MobileViT在尺寸上减小了1.6倍,并且性能提升了1.4%。
-
图表
- 表1:展示了MobileViT在物体检测任务上与其他模型的比较,MobileViT在这一任务上达到了更高的平均精度(mAP)。
- 表2:展示了MobileViT在语义分割任务上的性能,使用mIOU(平均交并比)作为性能评价指标。
- 图8:展示了MobileViT在不同任务上的推理时间,其中绿色区域的点表示这些模型可以实时运行(推理时间<33ms)。
这部分说明了MobileViT在移动设备上的实际应用潜力,尤其是在推理速度和模型尺寸方面。它还讨论了ViT模型在移动设备上可能面临的挑战,特别是与专门为移动设备优化的CNNs相比。
-
第4.3节:移动设备上的性能
- 讨论了MobileViT在轻量级和低功耗移动视觉应用中的重要性。
- 介绍了MobileViT在不同任务上(如CoreMLiOS应用)的推理时间,实验是在iPhone 12上进行的。
-
移动友好性
- 图2和图8展示了MobileViT网络在不同任务和不同配置下的推理时间。
- 配置A(Config-A)和配置B(Config-B)在输出步长、高度和宽度上有所不同。
- 配置B的模型不能像配置A那样从所有像素中编码信息,但在给定参数预算的情况下,配置B的模型运行速度更快。
- 在较大的patch尺寸(例如P=8×8)下,由于自注意力的计算成本较低,配置B的模型的并行度更高。
-
讨论
- 观察到MobileViT和其他ViT模型(如DeiT和PiT)在移动设备上的速度比MobileNetV2慢。
- 论文中讨论了这种现象的原因,提到ViT模型在GPU上运行良好,但在CPU优化不足的移动设备上则不然。
- CNNs可以从设备级优化中受益,这些优化包括更好的内存访问和专门的变换器操作。
-
表3:ViT比CNN慢
- 表3比较了多尺度采样器下ViT和CNN的性能差异,指出CNN在相同或更小的参数数量下运行得更快。
六、致谢、引用部分及研究
MobileViT的架构和多尺度采样器(这部分内容说明了MobileViT如何结合轻量级CNN的设计理念和变换器的优势,以及其在不同计算预算下的配置):
-
A节:MobileViT架构
- MobileViT的设计灵感来自于轻量级CNNs,初始层使用3x3的标准卷积,后续层使用MobileNetV2(MV2)块和MobileViT块。
- 使用Swish激活函数,并采用了扩展因子来增加网络容量,对于MobileViT-XXS使用扩展因子2,其他则为4。
- MobileViT块在变换器层中的第一个前馈层的输出维度设定为Vaswani等人(2017)标准变换器块的2倍。
-
B节:多尺度采样器
- 多尺度采样器可以减少泛化差距,指的是模型在未见数据集上的表现能力,使用多尺度采样器的MobileViT在训练效率和性能上有改善。
- 多尺度采样器是通用的,适用于不同的CNN模型,并且可以提高性能和训练效率。
-
表4:MobileViT架构
- 展示了MobileViT不同层的输出尺寸、步长和重复次数,以及不同尺寸(XXS, XS, S)的网络参数。
-
图表
- 图表描述了不同任务和设置下MobileViT模型的推理时间,或者是与其他模型的性能比较。
MobileViT在ImageNet-1k数据集上的性能评估,特别强调了多尺度采样器的使用,通过多尺度采样器,MobileViT在不同的模型尺寸和分辨率上能够更有效地学习并且提高了在ImageNet-1k数据集上的分类准确率。
MobileViT的消融研究 :
-
C节:消融研究(Ablations)
- 讨论了权重衰减(weight decay)对模型的影响,指出好的模型应对L2正则化不敏感或较不敏感,MobileViT对权重衰减不那么敏感。
- 探讨了跳连(skip-connection)的影响,结果显示即使没有跳连,MobileViT的性能也有所提升。
- 分析了不同补丁尺寸(patch sizes)对MobileViT学习局部和全局表示的有效性的影响。
-
图11:权重衰减的影响
- 展示了MobileViT-S模型在不同权重衰减设置下的训练误差、验证误差和验证准确率。
-
图12:跳连的影响
- 展示了MobileViT-S模型在有无跳连的情况下的训练误差、验证误差和验证准确率。
-
表6:补丁尺寸的影响
- 展示了不同补丁尺寸下MobileViT模型的参数量、运行时间和Top-1准确率。
MobileViT的内核尺寸和补丁尺寸之间的关系,以及标签平滑和指数移动平均对MobileViT性能的影响(我们在MobileViT模型设计时可以通过微调这些参数来优化模型性能):
- 讨论了如何在MobileViT中设置内核尺寸(n×n)和补丁尺寸(h×w)来优化信息聚合和模型性能。
- 图13:展示了卷积内核尺寸和补丁尺寸对MobileViT中信息折叠和展开的影响。
- 图13a:当 2h=w=2 且 n=3 时,每个像素可以编码来自其他像素的信息。
- 图13b:当 h=w=n=3 时,不允许每个像素聚合来自其他像素的信息。
- 图13c:当 h=w=4 且 n=3 时,全局池化允许聚合更多的信息。
- 表7:显示了标签平滑(LS)和指数移动平均(EMA)在MobileViT-S模型的ImageNet-1k数据集上的性能影响。
- 使用LS的模型达到了78.0%的Top-1准确率。
- 使用EMA的模型达到了78.3%的Top-1准确率。
- 这表明使用EMA相比LS可以获得略微提升的性能。
为了避免额外的操作,作者选择了h=w=2而不是h=w=3,因为特征图的空间维度是2的倍数,使用这种设置可以减少需要的计算量。
关于SSDLite和DeepLabv3的MobileViT网络的训练细节:
-
SSDLite和DeepLabv3的训练细节
- SSDLite-MobileViT和DeepLabv3-MobileViT网络分别训练了200和50个周期,使用的是NVIDIA GPU和128张图片的有效批量大小。
- 学习率从0.00009增加到0.0009,在前50个迭代期间,然后通过余弦退火调度降低到0.00009。
- 使用L2权重衰减系数0.01。
- 修改了MobileViT中MV2块的步长,从两个单位改为在32表中的输出步长1,以获得DeepLabv3-MobileViT模型的输出步长16。
-
为什么不使用多尺度采样器?
- 这些模型不使用多尺度采样器,因为这些任务特定的网络是依赖于分辨率的。
- 例如,DeepLabv3使用不同的空洞(膨胀)率来学习多尺度表示。例如,DeepLabv3使用空洞(膨胀)率为6、12和18的输出步长为16来学习多尺度表示。如果我们使用更低的分辨率(例如256×256而不是512×512),那么空洞卷积核的权重将被应用到填充的零上,使得多尺度学习变得无效。
-
E 扩展讨论
- 记忆优化
- 强调移动设备上运行网络的低内存占用至关重要。
- MobileViT网络通过优化内存占用、计算效率和能效提升性能。
- 以较大步长运行的MobileViT-S在多个方面更优,例如在ImageNet-1k数据集上进行分类时的FLOPs与其他CNN网络相当,但在语义分割任务上的FLOPs更少。
- 推理时间
- 在不同设备上,包括iPhone 12、NVIDIA GPU和NVIDIA V100 GPU,MobileViT模型提供了更好的性能。
- DeiT和PiT在GPU上运行得更快,但MobileViT-S在输入分辨率较大时(例如256x256相比224x224)运行得更快,并且没有使用多尺度采样器。
-
图表和数据
- 图13
- 描述了内核尺寸(n×n)和补丁尺寸(h×w)对MobileViT中信息编码的影响。
- 表7
- 展示了标签平滑(LS)和指数移动平均(EMA)对MobileViT-S在ImageNet-1k数据集上性能的影响。
- 表8
- 对比了MobileNetV2和MobileViT在不同任务上的内存需求。
- 表9
- 对比了不同ViT基础网络的性能,MobileViT-XS模型在不同补丁尺寸下的性能对比。
- 表10
- 展示了MobileViT-S与MobileNetV2在不同任务上的FLOPs和推理时间。
- 表11
- 展示了不同设备上MobileViT-S模型的推理时间,包括在256×256分辨率下的测量,与其他模型在224×224下的测量对比。
G 节:未见数据集上的语义分割结果
为了展示MobileViT模型可以学习到物体的泛化表示,作者评估了DeepLabv3-MobileViT模型在包含5k张图片的MS-COCO验证集上的语义分割效果。这些模型的表现在mIOU(平均交并比)指标上进行了比较。
- 表12:在MS-COCO验证集上的语义分割比较
- 对比了DeepLabv3-MobileViT模型与使用不同骨干网络的MobileNetV3-Large训练的模型。
- MobileViT-LR-ASPP与MobileNetV3-Large+DeepLabv3的对比显示,MobileViT提供了更好的性能。
- MobileViT模型展现出对物体的泛化表示能力,并在野外环境中表现良好。
文本提到,MS-COCO验证集是一个未见的测试集,DeepLabv3-MobileViT模型因为没有在这个数据集上训练或验证,所以它们的mIOU指标尤为重要。此外,文中还提到图17和图18进一步证明了MobileViT学习到的泛化表示。
上述部分具体展示了DeepLabv3-MobileViT模型在语义分割任务上的效果。以下是内容的概要:
- 图17和图18:展示了DeepLabv3-MobileViT模型在未见数据集MS-COCO上的语义分割结果。
- 每个图像都分为三个部分:左边是原始RGB图像,中间是模型预测的分割掩膜,右边是着色的分割掩膜,显示了PASCAL VOC数据集中不同物体的颜色编码。
- 图像示例包括多种场景和物体,如室内环境、动物、交通工具等,展示了模型在理解不同物体和场景方面的能力。
上述Python代码,展示了使用PyTorch实现的多尺度采样器类。这个类用于在不同尺度的图像批次上训练模型。
import torch
from torch.utils.data.sampler import Sampler
import torch.distributed as dist
import math
import random
import numpy as np
class MultiScaleSampler(DDPSampler):
def __init__(self, base_im_w: int, base_im_h: int, base_batch_size: int, n_data_samples: int, min_scale_mult: float = 0.5, max_scale_mult: float = 1.5, n_scales: int = 5, is_training: bool = False):
# 使用基础图像宽度、高度、批量大小、数据样本数量、
# 最小和最大尺度倍数、尺度数量和训练标志进行初始化。
def set_epoch(self, epoch: int) -> None:
# 为采样器设置当前的epoch。
def __iter__(self):
# 在索引上进行洗牌和迭代,生成图像尺寸和批量大小的批次对。
def _generate_img_batch_pairs(self):
# 私有方法,生成图像尺寸和批
MultiScaleSampler
类继承自 DDPSampler
(很可能是一个自定义类或与分布式数据并行相关的别名)。__init__
方法用多种参数初始化采样器,包括基础图像尺寸、批量大小、数据样本数量、尺度倍数、尺度数量以及一个指示是否处于训练状态的标志。set_epoch
方法用于设置采样器的当前epoch,这通常用于每个epoch不同地洗牌数据。__iter__
方法是一个迭代器,用于生成批次。_generate_img_batch_pairs
是一个辅助方法,用于为每个尺度创建图像尺寸和批量大小的配对。
代码使用分布式计算函数和随机洗牌,表明它设计用于跨多个GPU的分布式训练,这在大规模深度学习任务中很常见。这个采样器专门用于处理多尺度训练,可以在训练过程中动态调整输入图像大小,以提高模型的泛化能力和鲁棒性。
七、MobileViT模型,用于YOLO模型主干改造
MobileViT模型结合了轻量级卷积神经网络(CNN)的设计理念和视觉变换器(ViT)的优势,以下将结合论文内容说明如何将MobileViT用作YOLO模型主干的改造:
-
轻量级设计:
- MobileViT的设计受到轻量级CNN的启发,它使用较小的步长和卷积核,这能够减少内存占用并提高计算效率。
-
多尺度表示:
- MobileViT利用多尺度采样器来改善模型在不同尺度上的学习能力,这对于YOLO这种需要精确定位和识别物体的模型尤其重要。
-
泛化能力:
- MobileViT在MS-COCO等数据集上展示了良好的泛化能力,这对于YOLO模型处理多样化的实际场景非常关键。
将MobileViT用作YOLO模型的主干可能涉及以下步骤:
- 替换主干:将YOLO模型中的原始主干网络(如Darknet)替换为MobileViT,以利用其高效的特征提取能力。
- 调整尺度:根据YOLO模型的需要,对MobileViT中的补丁尺寸和步长进行调整,以优化目标检测的性能。
- 集成特征提取:MobileViT的特征提取输出需要与YOLO的检测头相结合,可能需要调整尺寸匹配和连接方式。
- 训练策略:使用多尺度训练方法来增强YOLO模型对不同尺寸目标的检测能力,这对于实现有效的目标检测至关重要。
MobileViT可以为YOLO模型提供一个高效的主干网络选项,通过以下方式实现:
-
高效的特征提取:MobileViT通过在较小的步长下编码像素之间的信息,能够在低内存和计算资源下有效提取特征。
-
适应多尺度输入:MobileViT通过调整卷积核和补丁尺寸能够适应不同分辨率的输入,这对于YOLO检测多尺度目标非常重要。
-
泛化和鲁棒性:MobileViT在多种场景下展现了优秀的泛化能力和鲁棒性,这有助于YOLO在实际应用中对各种环境下的目标进行有效检测。
-
内存和速度优化:MobileViT的结构针对移动设备进行了优化,其内存占用和推理速度上的改进使得它可以被应用于实时检测场景中。
在将MobileViT集成到YOLO模型中时,需要注意确保模型的其他部分(如检测头和锚框定义)与新的主干网络兼容,并且可能需要进行相应的微调和优化。
下一篇文章将介绍如何改进YOLOv5模型