深圳Yolo 视觉
深圳
立即加入
词汇表

带掩码的自编码器(MAE)

了解蒙面自编码器(MAE)如何革新自监督学习。探索MAE重建技术如何Ultralytics 性能与效率。

带掩码自编码器(MAE)是计算机视觉这一广阔领域中 一种高效且可扩展的 自监督学习方法。 作为一种 无需大量标注数据集即可训练高度参数化神经网络的方法,MAE 通过有意遮蔽输入图像中大面积的随机区域,并训练模型来重建 缺失的像素来工作。通过成功预测隐藏的视觉信息,网络本质上学会了对形状、纹理和空间关系的 深度语义理解。

该技术深受基于文本系统中掩码语言建模(MLM)成功经验的启发,但针对 图像数据的高维特性进行了调整。该架构采用了广受欢迎的 transformer 框架,采用非对称的 编码器-解码器结构。

蒙面自编码器的工作原理

MAE 的核心创新在于其处理效率。在训练过程中,输入图像会被划分为一个 由图像块组成的网格。 其中很大一部分(通常高达 75%)会被随机遮蔽并舍弃。 编码器(通常为 视觉Transformer ViT))仅处理 可见的、未被遮蔽的图像块。由于编码器完全跳过了被遮蔽的部分,因此所需的 计算和内存资源大幅减少,使得训练过程显著加快。

在编码器生成可见区域的潜在表征后,一个轻量级的解码器将接手工作。该 解码器接收经过编码的可见区域以及“掩码令牌”(缺失数据的占位符),并 尝试重建原始图像。由于解码器仅在此预训练阶段使用,因此可以 将其设计得非常小巧,从而进一步降低计算开销。 预训练完成后,解码器将被弃用, 而功能强大的编码器则会被保留下来,用于后续应用。

区分相关术语

要全面理解MAE,了解它们与较早或更广泛的 深度学习概念有何不同会有所帮助:

  • 自编码器传统的 自编码器会将整个输入压缩到一个更小的潜在空间中,然后通过重建来学习高效的数据 编码方式。然而,均方误差(MAE)则迫使网络去预测缺失的数据,而非仅仅对 整个输入进行压缩和解压。
  • 自监督学习 这是一种总体训练范式,模型无需人工标注的标签,仅通过数据本身进行学习。 MAE 是该概念的一种具体架构实现。
  • 基础模型MAE 常用于预训练视觉基础模型,随后针对特定任务进行微调。

实际应用

由于MAE能够学习到视觉数据的极其稳健的表示形式,因此它们是构建复杂、 现实世界人工智能系统的理想起点。

  • 高级目标检测的预训练:通过 MAE 预训练所习得的丰富特征提取能力,可显著提升下游 目标检测系统的性能。例如,在 Ultralytics 等模型的训练过程中,当使用 标注数据稀缺的定制化小众数据集时,便可利用 MAE 习得的特征。
  • 医学图像分析 在放射学等领域,收集大量标注过的MRI或CT扫描数据集成本高昂,且受 隐私法律的限制。研究人员利用医学图像分析(MAE)技术,利用近期发表在 arXiv上的大量无标注医学图像对模型进行预训练,随后仅凭极少的标注样本 对模型进行微调,从而detect 异常情况detect 。

数据与部署管理

一旦使用MAE方法对骨干网络进行了预训练,下一步就是对模型进行微调并部署,以 处理图像分类 图像分割等特定任务。 现代云生态系统使 这一过渡变得无缝衔接。例如,团队可以利用 Ultralytics 轻松标注特定任务的数据集, 协调云端训练,并将生成的生产就绪模型部署到边缘设备或服务器上。这 消除了机器学习运维(MLOps)中通常涉及的大量 基础架构重复性工作。

代码示例:模拟补丁遮罩

虽然训练完整的MAE需要完整的transformer 补丁遮罩的核心概念 PyTorch tensor 轻松可视化。这个 简单的代码片段演示了如何从输入tensor随机选取可见补丁。

import torch


def create_random_mask(batch_size, num_patches, mask_ratio=0.75):
    """Generates a random mask to simulate MAE patch dropping."""
    # Calculate how many patches to keep visible
    num_keep = int(num_patches * (1 - mask_ratio))

    # Generate random noise to determine patch shuffling
    noise = torch.rand(batch_size, num_patches)

    # Sort noise to get random indices
    ids_shuffle = torch.argsort(noise, dim=1)

    # Select the indices of the patches that remain visible
    ids_keep = ids_shuffle[:, :num_keep]

    return ids_keep


# Simulate a batch of 4 images, each divided into 196 patches
visible_patches = create_random_mask(batch_size=4, num_patches=196)
print(f"Visible patch indices shape: {visible_patches.shape}")

对于希望将强大的预训练视觉能力集成到工作流程中,却无需从头开始编写 架构的开发者而言,查阅内容丰富的 Ultralytics 是将 最先进的视觉模型应用于您独特挑战的绝佳起点。此外,诸如 TensorFlow 等主流框架,也提供了强大的生态系统,用于将前沿的 机器学习研究成果落地到可扩展的生产 环境中。

使用Ultralytics YOLO增强动力

为您的项目获取高级 AI 视觉。立即找到适合您目标的许可证。

探索许可选项