行人重识别 --- Mutiple Granularity Network(MGN)

论文:Learning Discriminative Features with Multiple Granularitiesfor Person Re-Identification

摘要

    行人表示的直观方法就是从图像中提取全身的辨别特征,全局特征学习的目的就是捕捉明显的线索,来表示不同行人的身份。由于行人Re-ID的数据集规模有限且多样性弱,一些不显著的或者不常见的信息容易被忽略,并且在全局特征学习过程中没有贡献,这使全局特征很难具备类内相近和类间相远的特性。为了解决这个问题,可以从图像中定位身体的重要部分来表示行人身份的局部信息(如图一所示)。论文提出了一个将全局信息和各粒度局部信息结合的端到端特征学习策略:Multiple Granularity Network (MGN)。
    MGN是一个多分支的深度网络:一个全局特征表示的分支和两个局部特征表示的分支。通过将图片划分成多个条带,并且改变不同局部分支的条带数量来获得多粒度局部特征表示。


图一 从粗粒度到细粒度的人体特征划分。最粗粒度的特征是整个身体, 中间和右侧列分别是行人分区,分为原始图像的2条和3条条纹。 分割的图像越多,分区的粒度越精细。

MGN 网络结构

    主干网络使用resnet50,并且将block res_conv4_1之后的部分分成三个分支,这三个分支的结构相似,但是下采样率不同。

图二 MGN的网络结构。主干网络resnet-50从res_conv4_1之后的部分分为三个分支:Global Branch, Part-2 Branch 和 Part-3 Branch。

    如上图所示,最上面的分支为全局分支(global branch),在res_conv5_1中使用了stride=2的卷积进行下采样,对得到的feature map采用全局最大池化(global max pooling)生成2048维的特征向量,并通过1✖️1的卷积压缩为256维的特征向量。
    中间和下面的分支用于学习局部的特征表示,为了保留适合局部特征的感受野,这两个分支都没有使用下采样。通过在水平方向上均匀的将feature map划分为N个条带,并对N个条带分别全局最大池化和1✖️1卷积来得到对应的局部特征,不同的N表示不同的粒度,N越大粒度越细。中间的分支N=2,可以理解为将行人分为上半身和下半身;下面的分支N=3,可以理解为将行人分为上,中,下三个部分。
    在测试的时候,将3个256维的全局特征向量和5个256维的局部特征向量concat起来得到的2048维向量作为行人的特征表示,用于相似性搜索。

loss函数

    为了让网络具备辨别的能力,论文将用于分类的softmax函数和用于度量学习的三元损失函数(triplet loss)用作训练过程中的损失函数,其中softmax loss借鉴了人脸识别中的Normface loss。
    softmax loss为:


softmax loss

    triplet loss为:


triplet loss

    如图二所示,对三个分支中256维的全局向量使用triplet loss,对剩余的特征向量使用softmax loss。

代码

    GitHub上已经有pytorch和caffe的复现:mgn-pytorch。
    参考论文和pytorch的版本,我实现了基于tensorflow的版本:mgn-tensorflow。

你可能感兴趣的:(行人重识别 --- Mutiple Granularity Network(MGN))