1. 概述
MGN网络使用ResNet50((Before res_conv4_2) )作为Backbone进行特征的析取。为了实现多粒度(Multiple Granularities),MGN从ResNet50的网络的尾部开始,将后续网络划分为3个分支,对应三个不同的粒度。
2. ResNet
ResNet 网络是在 2015年 由微软实验室一团队提出,团队成员包括大名鼎鼎的何凯明,斩获当年ImageNet竞赛中分类任务第一名,目标检测第一名。何恺明博士早起以“暗通道去雾”算法一举成名,后来大名鼎鼎的MaskRCNN也出自何博士。
时至今日,ResNet仍然因作为一些算法的Backbone而大行其道,后来的ResNeXt也有ResNet的影子。
如下为ResNet的几种形式,随着层数的不断加深,性能不断增强,对算力的要求也不断增大。
特别需要强调的一点是,ResNet的层数不仅局限于152层,它甚至可以超过1000层都不会出现明显的梯度消失和梯度爆炸现象,这得益于他独创的Resdual模块,以及使用BN层替代了Dropout。
图一 ResNet几种常见的结构
对于ResNet我们不做详细的讲解,公共资源比较多,在此不再重复造轮子了。但是,还是要跟大家聊一下两种典型的Resdual结构。如图二显示的是BasicBlock和BottleNeck。
图二 BasicBlock和BottleNeck
3. MGN
MGN是以ResNet50为Backbone设计而来。
MGN使用ResNet50作为Backbone(当然也可以使用ResNet101、ResNet152)。但值得注意的是,为了实现多粒度(Multiple Granularities),MGN仅使用到了ResNet50的Layer3中的第一个Block,而在该Block之后,MGN划分了三个分支。
如图三引用自论文原图,但是论文原图有三个明显的错误,在此已经用红叉和红箭头予以改正。
图三 MGN网络
从图中可以看到,在Layer3(res_conv4[0])之后,MGN创建了三个分支,分别是一条下采样和两条非下采样分支,其中非下采样分钟又被划分为三部分。通过如图四代码截图可以一窥究竟。
图四 通道划分实现多粒度
从图中可以看出,经过fc_id_***操作以后,进行分类损失计算。其中特征Tensor
用来计算Triplet Loss。特别提一句,在后续推理(re-id)时,
也被用作实际的特征匹配。