小白入门计算机视觉系列——ReID(四):再进阶:细粒度多特征融合

ReID(四):再进阶:细粒度多特征融合

       小白入门系列是我和朋友准备一起做的一块内容,分模块分专题·,比如计算机视觉中的目标检测,ReID,OCR,语义分割以及大火大热的AutoML等等。
       本次带来的是计算机视觉中比较热门的重点的一块,行人重识别(也叫Person ReID),车辆重识别和行人重识别类似,有很多的共同之处,所以以下统称该任务为ReID。

知乎:https://www.zhihu.com/people/bei-ke-er-1-34/activities
Github :https://github.com/lixiangwang/Person-ReID

       前面,我们基于一个优化的ResNet-50网络作为一个 baseline,学习的是图像数据的全局特征。然后我们基于baseline网络,使用了PCB分块方法,学习的是图像数据的局部特征。这里,将使用一个更复杂的模型来学习全局和局部特征,并训练一个细粒度多特征融合网络。

1. 单一全局特征与局部特征学习存在的问题

       下图是一幅行人图像学习全局特征和局部特征的特征响应图,左边部分是全局特征,右边部分是局部特征。
小白入门计算机视觉系列——ReID(四):再进阶:细粒度多特征融合_第1张图片
       全局特征的目的是学习到最显著的外观表现,但是,一些细节性的特征在全局特征学习时是被忽略的,比如人身上或者衣服上有个标志,当是这并不是所有的样本都有的,从上图的左边可以看到,全局特征会做特征均匀化,从而忽略掉一些细粒度的特征表现。
       局部特征可以关注更多的细节,但是无论是做关键点定位后的姿态估计还是图像的水平分块,都有很多先验知识在里面,在很多的场景中,我们获得的图像数据并没有那么完整(比如大面积被障碍物遮挡,姿态的大幅度变化,行人在图像中的不同占比,以及分块特征没有对齐校准等等)。所以,局部特征的学习鲁棒性还是不够高,在做数据集的迁移时,模型往往适应性比较差。
       所以,单一做全局特征或者局部特征的学习产生的效果还是不理想的。

2. 细粒度多特征融合网络

2.1 设计思路和原理

       既然单一的学习全局特征和局部特征都存在着问题,一个简单的思路是将其组合起来。
小白入门计算机视觉系列——ReID(四):再进阶:细粒度多特征融合_第2张图片
       上图为一种组合特征的划分方法。最左边为整张图像,我们学习的是局部特征,因此也是最粗的一级粒度特征。中间为每幅图像水平划分为2份,最右边为每幅图像水平划分为三份。中间和最右边的粒度等级依次为二级和三级。这三级的粒度特征可以作为我们网络学习的三个支路,最终可以整合为一个融合的特征。

2.2 网络结构分析

       多粒度的网络模型(Multiple Granularities Network,MGN)是云从科技2018年提出来的网络架构,它属于结合了两种特征,具有细粒度多特征融合特性的模型,并且在主流数据集上取得了最领先的成果。下图是它的网络结构,首先,它的backbone网络也是ResNet-50,只不过只取了前3组卷积层做初步的特征提取。初步提取之后,三个分支正如上节中提到的三级粒度,最上面的一个分支提取的是全局特征,也就是学习的第一级粒度,中间和最下面的两个分支提取的是局部特征,分别学习第二级和第三级的粒度特征。
小白入门计算机视觉系列——ReID(四):再进阶:细粒度多特征融合_第3张图片
       在初步的特征提取中,网络的参数是共有的,在后续三个分支的特征提取中,参数是独立的,这一思路也符合人为的观察效果。图中,ResNet-50有三层,分别对应后面的三个分支。在三个分支中可以看到,都有左右两个小方块,这一步实际上就是我们第三章中的特征图扩展,本来ResNet第四层卷积后会有个降采样,也就是stride=2,所以特征图谱尺寸要缩小一倍,也就是最上面那个分支,右边的小方块比左边的小方块小一倍的原因。而在第二个和第三个分支,我们将stride=1,也就是特征图扩张一倍,相当于没有了降采样的步骤,所以它左右方块大小是一样的。在第二个支路中,特征图之后又有两个支路,一个是没有做分割的特征,也就是全局特征(区别于第一支路的一点是这个全局特征已经做了特征图扩张了),另一个是水平分割成两部分,此为第二级粒度,之后,我们做一个最大值池化,得到的特征维度是2048,然后做降维,成256维,方便计算。第三个分支和第二个分支类似,也是独立出一个全局特征块,然后分成三个部分,做了池化和1*1卷积核的降维操作后得到不同的特征分块。
       在loss的设计上,使用的是常见的loss:softmax loss和triplet loss。但是各分支对应的loss不同,属于triplet loss的特征图有:第一个分支中,做池化和降维后的256维特征图;第二个和第三个分支中,做了特征图扩张的全局特征,再池化和降维之后的256维特征图。属于triplet loss的特征图块有3个。属于softmax loss的特征图有:第一第二第三分支中的全局特征,在池化之后,降维之前的特征图块,以及第二第三分支各分块特征图的最终图块。属于softmax loss的特征图块有8个。关于分块特征图不给triplet loss训练也是有原因的,因为理想状态下,比如人分成两块,是上半身一块,下半身一块,但是往往分割的上半部分是人的整个图像,而下半部分是其他的物体,这样的分块特征图谱给三元组损失(triplet loss)训练是很容易得出奇怪结果的。

3. 计算结果分析

云从科技开源了这个项目,下面抛出论文链接和基于PyTorch实现的详细代码。

原文链接

GitHub

你可能感兴趣的:(计算机视觉)