多重记忆系统模型(Atkinson—Shiffrin memory mode)
该理论模型[1]是Atkinson和Shiffrin1968年提出的一种信息加工理论模型
主要核心有两点:
一是记忆存贮过程分为感觉记忆、短时存贮、长时存贮
二是短时记忆是感觉记忆与长时记忆的缓冲器,并作为信息保持进入长时记忆的加工器
短时记忆与感觉记忆的区别在于它是对信息进行了变换和编码,它存贮信息的周期约为30s,长时记忆是对短时记忆不断复述的结果。
在 XMem 中,
感觉记忆对应于每帧更新的 GRU [11] 的隐藏表示。它提供了时间平滑度,但由于表示漂移而无法进行长期预测。
工作记忆是从历史框架的子集中聚合而成的,并平等地考虑它们 [36,9] 而不会随着时间的推移而漂移.
为了控制工作记忆的大小,XMem 经常将其表示整合到长期记忆中,XMem 将长期记忆存储为一组高度紧凑的原型.
XMem: Long-Term Video Object Segmentation
with an Atkinson-Shiffrin Memory Model
University of Illinois Urbana-Champaign
引言:
XMem,这是一种用于长视频的视频对象分割架构,具有统一的特征内存存储,受 Atkinson-Shifferin 内存模型的启发而作
遵循 Atkinson-Shiffrin 模型,我们开发了一种架构,该架构包含多个独立但深度连接的特征记忆存储:快速更新的感觉记忆、高分辨率工作记忆和紧凑的因此持续的长期记忆
三种记忆单元: 快速的感知记忆, 高分辨率的工作记忆, 连续的长期记忆
认为这种性能和 GPU 内存消耗的不良联系是使用单一特征内存类型的直接后果。为了解决这个限制,我们提出了一个统一的内存架构,称为 XMem
用户给定参考一帧!!!!
作者发现的问题是,模型内存消耗很大 , 内存消耗和准确性紧密联系在一起
作者提出了一个使用较小记忆单元的前提下,保持准确度的办法
创新点:
1.设计了XMEM。 受Atkinson-Shiffrin记忆模型[1]的启发,引入了不同时间尺度的记忆存储,并为它们配备了一个记忆读取操作,用于长视频和短视频的高质量视频对象分割。
- 开发了一个记忆巩固算法,从工作记忆中选择有代表性的原型,并开发了一个记忆增强算法,将这些原型丰富成一个紧凑而强大的长期记忆存储表示。
作者使用 STCN 作为工作记忆主干
感知记忆:每帧都更新一次
工作记忆:每第 r 帧更新一次
长期记忆:当工作记忆充满时,以更为紧凑的方式提取为长期记忆, 过于长久的记忆会丢弃
Q: 论文中如何实现三个记忆单元的,
论文模型的整体Forward是怎样的流程
论文是CNN网络还是Transformer网络
论文中的
key_dim 默认64 value_dim 默认512 hidden_dim 默认64
keyEncoder: 采用 Resnet50 编码,并且只获取后三层(f4,f8,f16)的值 ,channel【256,512,1024】
输入:一张图片
输出:(f4,f8,f16)的值 ,channel【256,512,1024】
KeyProjection:keyproj(x), shrinkage, selection -》64
输入:x
输出: keyproj(x), shrinkage, selection
valueEncoder :采用Resnet18编码,V4,V8,V16 ,channel【64,128,256】, 实际只保留了V16【256】
传入参数,值的维度,隐藏层的维度
输入:图片,图片的F16【1024】,隐藏层数据,mask,others
输出:g ,hidden
Decoder:
特征融合,FeatureFusionBlock
结构:MainToGroupDistributor, GroupResBlock, CBAM, GroupResBlock
MainToGroupDistributor: 默认是 将x 和g cat一下, 【x,g】
GroupResBlock: 两个卷积,没有batchnorm
CBAM:默认通道注意力,不开启空间注意力
传入参数:x_in_dim, g_in_dim, g_mid_dim, g_out_dim
(1024, val_dim + hidden_dim, 512, 512)
输入:x , g
输出:g
隐藏层更新, HiddenUpdater, 实际上可以理解为GRU模块
结构: GConv2D 普通卷积
传入参数g_dims, mid_dim, hidden_dim
([512, 256, 256 + 1], 256, hidden_dim)
运算: g[0] + g[1] +g[2] 然后cat 然后 GRU运算
上采样模块, UpsampleBlock
思想:跳跃先维度变换到上采样维度,然后直接值相加,整个文章的思路就是同一层值相加来保证信息不丢失
传入参数:skip_dim, g_up_dim, g_out_dim, scale_factor=2
512, 512, 256
输入:skip_f, up_g
输出: g
Xmen的四种模式下的输入和对应的输出
encode_key
传入 frames, 经过resnet50 编码获得 f16, f8, f4
f16经过三个不同卷积, 获得key, dim为1 的shrinkage, 与key dim 相同的 selection(sigmoid)
输出 key, shrinkage, selection, f16, f8, f4 B*C*T*H*W
encode_value 【ValueEncoder, resnet18】 最后的结果结合之前的信息,综合GRU,
由于需要给定一张参考图去做分割,
输入 前时刻的h0, 参考图的image,mask,当前的f16,其他
输出 g16, h16
read_memory
传入: query_key : B * CK * H * W
query_selection : B * CK * H * W
memory_key : B * CK * T * H * W
memory_shrinkage: B * 1 * T * H * W
memory_value : B * num_objects * CV * T * H * W
结构:
affinity = get_affinity(memory_key, memory_shrinkage, query_key, query_selection)
-》
similarity = get_similarity(mk, ms, qk, qe)
affinity = do_softmax(similarity)
memory = readout(affinity, memory_value)
返回 memory
segment
特征F 是通过读取操作获得 F = vW(key,quary)
quary -> 通过特征提取器resnet50获得,
实现细节
注意到默认的序列长度为 3 不足以训练感觉记忆,因为它严重依赖于初始状态。因此,我们改为对长度为 8 的序列进行采样。
inity, memory_value)
返回 memory
segment
特征F 是通过读取操作获得 F = vW(key,quary)
quary -> 通过特征提取器resnet50获得,
实现细节
注意到默认的序列长度为 3 不足以训练感觉记忆,因为它严重依赖于初始状态。因此,我们改为对长度为 8 的序列进行采样。