H2HRG中HOSG和HGAM模块以及CMCC loss 在代码中的体现

HOSG:提取身份信息个部分之间的关系

首先将每幅图像进行均匀划分为6份,形成6个节点。代码中体现:

for i in range(self.num_stripes):
            # local_6_feat = F.max_pool2d(
            #     feat[:, :, i * stripe_h_6: (i + 1) * stripe_h_6, :],
            #     (stripe_h_6, feat.size(-1)))

            local_6_feat = feat[:, :, i * stripe_h_6: (i + 1) * stripe_h_6, :]
            b, c, h, w = local_6_feat.shape
            local_6_feat = local_6_feat.view(b, c, -1)
            p = 3  # regDB: 10.0    SYSU: 3.0
            local_6_feat = (torch.mean(local_6_feat ** p, dim=-1) + 1e-12) ** (1 / p)
            local_6_feat = local_6_feat.view(local_6_feat.size(0),local_6_feat.size(1),1,1)

            local_6_feat_list.append(local_6_feat)

for i in range(self.num_stripes):
            local_6_feat = self.local_6_conv_list[i](local_6_feat_list[i]).squeeze(3).squeeze(2)

同一图像中不同节点之间距离公式

除去目标节点,剩余5个节点的聚合信息,代码体现:

        for i in range(self.num_stripes):
            rest_6_feat_list.append((local_6_feat_list[(i + 1) % self.num_stripes]
                                     + local_6_feat_list[(i + 2) % self.num_stripes]
                                     + local_6_feat_list[(i + 3) % self.num_stripes]
                                     + local_6_feat_list[(i + 4) % self.num_stripes]
                                     + local_6_feat_list[(i + 5) % self.num_stripes]) / 5)

 利用下图方式更新节点特征,更新后的节点特征包含本节点特征以及本节点与其他节点之间关系

 代码体现:

        for i in range(self.num_stripes):

            local_6_feat = self.local_6_conv_list[i](local_6_feat_list[i]).squeeze(3).squeeze(2)

            input_rest_6_feat = self.rest_6_conv_list[i](rest_6_feat_list[i]).squeeze(3).squeeze(2)

            input_local_rest_6_feat = torch.cat((local_6_feat, input_rest_6_feat), 1).unsqueeze(2).unsqueeze(3)

            local_rest_6_feat = self.relation_6_conv_list[i](input_local_rest_6_feat)

            local_rest_6_feat = (local_rest_6_feat
                                 + local_6_feat.unsqueeze(2).unsqueeze(3)).squeeze(3).squeeze(2)

            final_feat_list.append(local_rest_6_feat)

 但是代码中剩余节点并没有经过上图中的Gem pooling层

HGAM:目的是使同一个人的不同图像之间的特征是对齐的,从而避免两幅图像之间噪声信息的干扰。

首先构造了一个异质相邻矩阵E,eij表示第i个样本和第j个样本的L2距离。

然后利用和Dijkstra类似的路径搜索算法计算两个图之间的最终最短距离(我对这个最终最短距离的理解是综合两个图的所有对应节点的距离最短)

CMCC

作者期望异构全局图特征是一致的,即希望统一身份下红外样本和可见光的全局图特征表示各部分所表示的特征是一致的。

每个样本的特征图为一个归一化之后的向量,两个向量的点积表示两个特征图的相关性(也可以理解为点积为两向量的夹角,夹角约小,相关性越高)

所以CMCC损失可以写为

 M为样本数量,a为协同系数。通过CMCC损失,可以使Xii趋向于1,使Xij趋向于0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值