Open SunHaoOne opened 7 months ago
周博士: 您好!
我在阅读您的代码时注意到了一些关于加快推理速度的技巧,特别是关于cache的使用以及如何处理帧与帧之间的agent编码问题。我有几个问题想要进一步了解和确认:
Temporal Attention中的KV Cache使用:在处理新帧时,您使用了历史的agent encodings。我理解这里应该使用的是KV Cache技巧,通过下三角矩阵的mask来保证推理结果的一致性。请问我的理解是否正确?
Agent数量与顺序不一致的处理:
单帧Agent的edge和r计算:当只传入一个时间点的agent数据时,例如计算edge_index_t可能为空,这会导致无法计算rel_pos_t等相对关系,进而影响后续的Temporal Attention计算。我试了试每个agent的edge_index_t给的值为[[0],[0]],但attention的结果略有差异。这种差异可能是因为单个时间步的position_embedding和连续时间步骤的position_embedding不同导致的,在这种情况下应该如何处理能保证推理和训练结果一致性呢?
附上相关我理解的代码修改段落供参考,麻烦看看我的理解是否正确:
for i in range(self.num_layers): x_a = x_a.reshape(-1, self.hidden_dim) x_a = self.t_attn_layers[i]((x_a, x_a), r_t, edge_index_t, kv_cache = kv_cache) x_a = x_a.reshape(-1, 1, self.hidden_dim).transpose(0, 1).reshape(-1, self.hidden_dim) x_pl = x_pl.transpose(0, 1).reshape(-1, self.hidden_dim) x_a = self.pl2a_attn_layers[i]((x_pl, x_a), r_pl2a, edge_index_pl2a) x_a = self.a2a_attn_layers[i]((x_a, x_a), r_a2a, edge_index_a2a) x_a = x_a.reshape(1, -1, self.hidden_dim).transpose(0, 1) if x_a_past is not None: x_a = torch.cat([x_a_past[1:, :, :], x_a], dim = 1) return x_a, kv_cache
期待您的回复和指导。
谢谢!
周博士: 您好!
我在阅读您的代码时注意到了一些关于加快推理速度的技巧,特别是关于cache的使用以及如何处理帧与帧之间的agent编码问题。我有几个问题想要进一步了解和确认:![image](https://github.com/ZikangZhou/QCNet/assets/63139141/4945f9f8-76cf-4e3d-ac92-7f2aa01825ca)
Temporal Attention中的KV Cache使用:在处理新帧时,您使用了历史的agent encodings。我理解这里应该使用的是KV Cache技巧,通过下三角矩阵的mask来保证推理结果的一致性。请问我的理解是否正确?
Agent数量与顺序不一致的处理:
单帧Agent的edge和r计算:当只传入一个时间点的agent数据时,例如计算edge_index_t可能为空,这会导致无法计算rel_pos_t等相对关系,进而影响后续的Temporal Attention计算。我试了试每个agent的edge_index_t给的值为[[0],[0]],但attention的结果略有差异。这种差异可能是因为单个时间步的position_embedding和连续时间步骤的position_embedding不同导致的,在这种情况下应该如何处理能保证推理和训练结果一致性呢?
附上相关我理解的代码修改段落供参考,麻烦看看我的理解是否正确:
期待您的回复和指导。
谢谢!