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

记忆银行

记忆库是一种用于机器学习算法的数据结构,用于存储和引用过去迭代或已处理样本的信息,从而有效地将模型的记忆容量与其即时计算限制解耦。在深度学习(DL)的背景下,记忆库通常作为嵌入向量或特征向量的存储库。 这使得模型能够将当前输入与海量历史输入进行比对,而无需重新处理或将所有数据同时保存在活动随机存取存储器(RAM)中。通过维持表示缓冲区,模型能够从更广阔的上下文中学习,从而在需要长期一致性或与大型数据集进行比对的任务中提升性能。

记忆库的运作机制

记忆库的主要功能是将可用信息扩展至当前批处理规模之外。在训练过程中,当数据流经神经网络时,生成的特征表示会被推入记忆库。若记忆库达到最大容量,通常会移除最旧的特征以腾出空间容纳新特征,该过程称为先进先出(FIFO)队列机制。

该机制至关重要,因为 GPU 内存是有限的。若没有内存库,将单张图像与百万张其他图像进行比对时,所需批量大小将超出标准硬件的承载能力。借助内存库,模型可存储百万张图像的轻量化向量,并通过相似度搜索技术(如点积或余弦相似度)高效调用这些向量。

实际应用

内存库已成为若干先进计算机视觉(CV)和自然语言处理工作流中的基石:

  • 对比学习(自监督学习):其最著名的应用之一是对比学习,特别是动量对比(MoCo)等算法。此处的目标是训练模型从大量"负样本"(不同图像)中识别特定图像。 内存库存储着数千个负样本表示, 使模型无需标注训练数据即可学习稳健特征。 关于深层技术细节, 研究者常引用推广该方法的MoCo论文
  • 长期目标追踪:在视频分析中,目标(如汽车或人)可能被障碍物暂时遮挡。标准追踪器在此遮挡期间可能会丢失目标的身份标识(ID)。 高级追踪器通过内存库存储历史检测对象的视觉特征。当目标物重新出现时,系统会调用该库重建正确ID。Ultralytics 进行目标追踪的用户,可受益于其内部逻辑——该逻辑能跨帧维持目标身份的一致性。
  • 视频理解:要识别持续数秒或数分钟的动作,模型需要时间上下文。记忆库作为过往帧或片段的缓冲区,使网络在处理视频结尾时能够"记住"开头发生的内容。这对准确识别动作至关重要。

区分相关概念

区分内存库与词汇表中其他存储和处理概念是有帮助的:

  • 内存库与向量数据库 两者均存储用于检索的嵌入向量但内存库通常是临时性的内存结构,仅在单次模型训练主动推理过程中动态使用;而向量数据库(如RAG中使用的)则是持久化、可扩展的存储方案,旨在长期运行并服务于多个应用场景。
  • 记忆库与上下文窗口 上下文窗口(常见于Transformer模型)定义了模型单次处理的最大输入序列长度(例如32k个令牌)。记忆库则是存储压缩表示的外部缓冲区,位于活动处理窗口之外,理论上可实现无限记忆深度,如Transformer架构所采用。
  • 内存库与批量大小批量大小决定了梯度更新中并行处理的样本数量。内存库则在不增加正向和反向传播计算成本的前提下,有效提升了模型用于比较的样本数量。

代码示例:模拟特征库

以下是 Python 该代码片段演示了采用FIFO(先进先出)机制的存储器库概念。 torch该结构常用于在自定义训练循环或复杂推理任务中维护特征向量的滚动历史。

import torch

# Initialize a memory bank (Capacity: 100 features, Vector Dim: 128)
# In a real scenario, these would be embeddings from a model like YOLO26
memory_bank = torch.randn(100, 128)

# Simulate receiving a new batch of features (e.g., from the current image batch)
new_features = torch.randn(10, 128)

# Update the bank: Enqueue new features, Dequeue the oldest ones
# This maintains a fixed size while keeping the memory 'fresh'
memory_bank = torch.cat([memory_bank[10:], new_features], dim=0)

print(f"Updated Memory Bank Shape: {memory_bank.shape}")
# Output: Updated Memory Bank Shape: torch.Size([100, 128])

挑战与考量

尽管功能强大,记忆库却带来了"表征漂移"的挑战。由于编码器网络在每次训练步骤中都会发生细微变化,记忆库中100步前存储的特征可能已"过时"或与当前模型状态不一致。采用动量编码器(即模型缓慢更新的平均值)等技术有助于缓解这一问题。

对于希望管理数据集版本并利用这些先进技术处理模型成果的团队而言Ultralytics 提供了一个集中式枢纽,可高效组织数据、track 实验并部署模型。管理特征存储与检索的复杂性,对于将实验性人工智能(AI)转化为稳健的生产系统至关重要。

加入Ultralytics 社区

加入人工智能的未来。与全球创新者联系、协作和共同成长

立即加入