PFE[2019-ICCV]

Motivation

  • Embedding-feature[确定性的点估计]的模糊性

     

  1.  Gaussian Blur | Occlusion |  Random Gaussian Noise [left-->right];
  2. 将图片质量较低的diff-pair错误地识别为same-pair;
  3. 将不同图片质量[eg: cross-quality image pair)]的same-pair错误地识别为diff-pair;
  • 人脸识别:点估计 or 密度估计 ?

                                         

Code

class MLSLoss(nn.Module):

    def __init__(self, mean = False):

        super(MLSLoss, self).__init__()
        self.mean = mean

    def negMLS(self, mu_X, sigma_sq_X):

        if self.mean:
            XX = torch.mul(mu_X, mu_X).sum(dim=1, keepdim=True)
            YY = torch.mul(mu_X.T, mu_X.T).sum(dim=0, keepdim=True)
            XY = torch.mm(mu_X, mu_X.T)
            mu_diff = XX + YY - 2 * XY
            sig_sum = sigma_sq_X.mean(dim=1, keepdim=True) + sigma_sq_X.T.sum(dim=0, keepdim=True)
            diff    = mu_diff / (1e-8 + sig_sum) + mu_X.size(1) * torch.log(sig_sum)
            return diff
        else:
            mu_diff = mu_X.unsqueeze(1) - mu_X.unsqueeze(0)
            sig_sum = sigma_sq_X.unsqueeze(1) + sigma_sq_X.unsqueeze(0)
            diff    = torch.mul(mu_diff, mu_diff) / (1e-10 + sig_sum) + torch.log(sig_sum)  # BUG
            diff    = diff.sum(dim=2, keepdim=False)
            return diff

    def forward(self, mu_X, log_sigma_sq, gty):
        
        mu_X     = F.normalize(mu_X) # if mu_X was not normalized by l2
        non_diag_mask = (1 - torch.eye(mu_X.size(0))).int()
        if gty.device.type == 'cuda':
            non_diag_mask = non_diag_mask.cuda(0)      
        sig_X    = torch.exp(log_sigma_sq)
        loss_mat = self.negMLS(mu_X, sig_X)
        gty_mask = (torch.eq(gty[:, None], gty[None, :])).int()
        pos_mask = (non_diag_mask * gty_mask) > 0
        pos_loss = loss_mat[pos_mask].mean()
        return pos_loss
class UncertaintyHead(nn.Module):
    ''' Evaluate the log(sigma^2) '''
    
    def __init__(self, in_feat = 512):

        super(UncertaintyHead, self).__init__()
        self.fc1   = Parameter(torch.Tensor(in_feat, in_feat))
        self.bn1   = nn.BatchNorm1d(in_feat, affine=True)
        self.relu  = nn.ReLU(in_feat)
        self.fc2   = Parameter(torch.Tensor(in_feat, in_feat))
        self.bn2   = nn.BatchNorm1d(in_feat, affine=False)
        self.gamma = Parameter(torch.Tensor([1.0]))
        self.beta  = Parameter(torch.Tensor([0.0]))   # default = -7.0
        
        nn.init.kaiming_normal_(self.fc1)
        nn.init.kaiming_normal_(self.fc2)


    def forward(self, x):
        x = x.view(x.size(0), -1)
        x = self.relu(self.bn1(F.linear(x, F.normalize(self.fc1))))
        x = self.bn2(F.linear(x, F.normalize(self.fc2)))  # 2*log(sigma)
        x = self.gamma * x + self.beta
        x = torch.log(1e-6 + torch.exp(x))  # log(sigma^2)
        return x

Details

  • Insight

       假设Embedding-feature space中的feature服从多元高斯分布,均值表示input-image最可能被编码的feature,方差则表示模型的confidence.

                                                                          

       为了简化模型,作者假设多元高斯分布的协方差矩阵为对角矩阵[意味着嵌入特征的各维度之间是独立的];

  • Matching

                                                    

       上式表示对于给定的pair(x_i, x_j)它们的嵌入特征相同的概率,对上式取log-likelihood则有:

                                

       作者将上式称为Mutual Likelihood Score[MLS], 它度量了特征空间中两个分布的重叠程度,其取值越大意味着重叠程度越大.

       特点 :1.无界性导致MLS不能称为距离度量;2. 与KL-散度相比,MLS具有对称性;3.具有自动加权、惩罚的机制;

  • Fusion

                        

       核心思想:对属于同一个identity的不同的images所对应的嵌入特征的分布进行融合、调整!

       假设条件:

              1). 观测样本x_i {i=1,2, ..., n} 关于隐变量z条件独立 【P(X,Y|Z) = P(X|Z) P(Y|Z)】;

                                                    

              2). P(z)为无信息先验,即P(z)为方差趋于+∞高斯分布;

              3). 融合公式[具体的推导详见论文的arXiv版本]

                                                                       

  • Learning
  1. 对于SOTA的pre-trained主干网络f(x),固定其weights用作u(x) = f(x);
  2. 优化Uncertainty Module来获得样本的不确定性sigma(x),优化准则是minimize 所有genuine-pairs的MLS;

                                                                          

Experiment

  • Benchmark

      

  • Qualitative Analysis

     

     Note : Gaussian Blur | Occlusion |  Random Gaussian Noise [left-->right];

  1. 采用PFE之后,模型在一定程度上缓解了Deterministic Point Representation模型的feature ambiguity dilemma

      

     Note : IJB-A  | (LFW, IJB-A)

  1. 高质量的face-image对应的embedding-feature的variance较小,而low-quality的face-image对应的特征的variance较大;
  2. 在风控场景中,可以通过特征方差的调和平均数的倒数作为样本质量的confidence来对low-quality的图片进行筛选;

Reference

[1]. Probabilistic Face Embeddings[2019-ICCV]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReLuJie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值