[LAB 12 · CLIP延伸:缓存与检索(近似索引选读)](/course/notebooks/921eeaf784284ce19568c6ca7619b55a.html) # 5 · 查询依赖的交互:一个可运行的区域加权对照 · 实现代码 [独立阅读](/course/notebook-blocks/06052931c0434d36aae2251b7873e30c.html) 并入相关学习路径 同一CLIP缓存、exact/IVF搜索、延迟/扫描量、区域交互基线 展开完整实现代码 ``` R=a['relation_regions'][:,1:] # 两图 × 两区域 × 512,丢弃full区域 # 同一图片换查询,观察权重确实变化。 atomic=R[0]@Q[[0,2]].T weights=np.exp((atomic-atomic.max(0,keepdims=True))/.05) weights/=weights.sum(0,keepdims=True) print('cat / astronaut 查询的 [左区,右区] 权重:',weights.T) # 同样两个对象交换左右;无坐标的对称聚合不可能分辨顺序。 local=np.einsum('ijd,kd->ikj',R,a['relation_text']) w=np.exp((local-local.max(-1,keepdims=True))/.05);w/=w.sum(-1,keepdims=True) score=(w*local).sum(-1) print('两张交换图 × 两条关系句:',score) assert np.allclose(score[0],score[1],atol=1e-6) ```