传统的判别模型(针对predicate种类)如c所示,对于同一对物体总是倾向于产生相同的predicate。但是视觉关系往往是语义模糊的 ,比如:
(1)person-holding-umbrella/person-carraying-umbrella,都是正确的,这是同义词模糊
(2)cat-on-chair/car-laying on-chair,都是描述猫在椅子上的,这是包含意义模糊
(3)person-using-laptop/person-in front of-laptop,根据侧重的方面不同判断出的predicate,这个是多视点模糊
前面说传统的模型都是判别式的,这篇文章提出了Probabilistic Uncertainty Modeling Module(即PUM),以概率的方式解决了上述语义模糊问题。
(a)目标检测,使用的是ResNetCAGCN(CA,cross attention),为含有上下文信息的物体特征建模。
最后的这个xi_hat将进入分类器判断物体的类别。
(b)特征融合
前两个都是cross attention的结果,最后一个是普通的union bbox feature,菱形框表示融合函数。
把真实分布看作是一个超高维高斯分布。
把batch中的所有rel_feature都看作是取自这个超高维高斯分布的样本。
假设一个batch里有32组主客体对的rel_feature,前半截是self.mu,后半截是self.log_var,训练时,把self.mu直接放到rel_compress(其实就是个全连接层)中进行predicate分类;测试时,self.mu和self.log_var决定了一个超高维的高斯分布,在这个高斯分布中采样一定的样本(代码中默认采8个),计算它们的均值,再输入rel_compress中。
论文部分代码:↓
gaussian_emb是一个linear层,把原来用于概率表示的维度增大到两倍,前半截当做均值,后半截当做方差。如果是训练,就把均值当做最终特征,压缩为51类(谓语的种类数)。如果是测试,就把mu + exp(log_var / 2) * eps当做最终特征进行维度压缩。eps是randn取得的。针对一个谓语的的采样数目默认为8。最终的结果来自于这8个概率的均值。
-------------------------------一些碎碎念-------------------------------
论文早就读完了,老师说要上手,我就开始上手。
配环境直接血压拉满。
中秋两天假期都在搞。
但是还是没有搞出来。
干脆直接看代码了。
真正有价值的感觉也就这几行代码(?)
21.11.21
代码跑出来了。
确实就这几行。
如果不算loss的话。