详解ReID的各部分组成及Trick——Head

       Head指的是ReID任务中将前面模块获得的特征向量做一定变化,来获得可以用于构建损失函数最后完成学习。

1、Linear

       Linear是ReID中最常见的Head之一,其构成非常简单,仅仅由一层或者多层全连接层构成。全连接层的目标是把特征向量变化为可以构建ID loss(常见的有交叉熵)的one hot编码。
在这里插入图片描述


2、Bnneck

       Bnneck是在BoT(见前文)这个工作提出的,这是这篇文章的核心点。我们常用的Baseline通常会同时使用ID损失和triplet损失一起优化同一个feature。但是在大量前置的研究发现,分类损失其实是在特征空间学习几个超平面,把不同类别的特征分配到不同的子空间里面。并且从人脸的SphereFace到ReID的SphereReID等工作都显示,把特征归一化到超球面,然后再优化分类损失会更好。triplet loss适合在自由的欧式空间里约束。我们经常观察到,如果把feature归一化到超球面上然后再用triplet loss优化网络的话,通常性能会比不约束的时候要差。我们推断是因为,如果把特征约束到超球面上,特征分布的自由区域会大大减小,triplet loss把正负样本对推开的难度增加。而对于分类超平面,如果把特征约束到超球面上,分类超平面还是比较清晰的。对于标准的Baseline,一个可能发生的现象是,ID loss和triplet loss不会同步收敛。通常会发现一个loss一直收敛下降,另外一个loss在某个阶段会出现先增大再下降的现象。也就是说这两个task在更新的过程中梯度方向可能不一致。但是由于最终都能够收敛,所以可能容易引起大家的忽视。
       基于以上现象考虑,我们希望找个一种方式,使得triplet loss能够在自由的欧式空间里约束feature,而ID loss可以在一个超球面附近约束feature,于是乎就出现了以下的BNNeck。BNNeck的原理也很简单,网络global pooling得到的feature是在欧式空间里的,我们直接连接triplet loss,我们把这个feature记作 。然后这个feature经过一个BN层得到 ,经过BN层的归一化之后, batch里面 的各个维度都被拉到差不多,最后近似地在超球面附近分布。
       作者也说明了这个的提出是观察获得的产物,并没有严格的理论推导。
在这里插入图片描述


3、Reduction

       Reduction因为笔者查阅能力有限,并没有找到它的出处,也可能是FastReID中所构建的一个Head,它的操作是在Bnneck的前面先通过一个1x1的卷积,对特征向量做一个降维,这个的好处可能是能减少FC的参数,同时新构建的特征向量都是考虑到特征向量的中的所有值所获得的,或许对性能有所提高。
       它在代码中的体现和Bnneck只有一行代码的区别。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值