1、ResNet

       在FastReID中常用的ResNet结构有ResNet50和ResNet101。调用了在ImageNet上的预训练模型来作为Backbone,这样可以提高模型的性能。关于ResNet的设计,基本上接触过深度学习的都很熟悉了,这里为了方便对比主要列出其残差块的设计。

resid中加1 residsnce_深度学习



2、ResNeXt

       ResNeXt是在ResNet上做出的一个改进,结合了Inception的思想,通过一系列相同拓扑结构的卷积操作来获取特征,最后concat在一起。

resid中加1 residsnce_卷积_02



3、ResNeSt

       ResNeSt是2020年的一篇工作《ResNeSt:Split-Attention Networks》

resid中加1 residsnce_卷积_03


       从左到右分别是SENet, SKNet, ResNeSt的网络结构,Split-Attention其本质可理解为切片的注意力监督机制。在ResNeST中的block设计是结合了ResNeXt和SeNet的设计做出的。


4、IBN

       由于训练集和测试集往往是不同场景下的数据,IBN block当初提出是为了提高针对不同场景下的模型泛化性能,提升跨域(cross domain)能力,在ReID任务中,IBN表现优异。

resid中加1 residsnce_归一化_04

       常用结构如上图所示,其中IN和BN操作不同之处在于BN考虑了整个batch中相关通道的所有特征图进行归一化,而IN之考虑到自身通道的特征图做归一化(见下图),这样做的好处实际上可以理解,在保持了通道的响应的情况下,让特征不会太受到场景迁移的影响,如光照等。而在IBN的block设计中,基于原本的ResNet的block增加了IN的操作,目的性就是去增加这种跨域泛化的能力,而这种能力在ReID任务中实际上非常重要。

resid中加1 residsnce_归一化_05


5、Non-local

       Non-local是一种全局注意力机制,Local这个词主要是针对感受野(receptive field)来说的。以卷积操作为例,它的感受野大小就是卷积核大小,而我们一般都选用33,55之类的卷积核,它们只考虑局部区域,因此都是local的运算。相反的,Non-local指的就是感受野可以很大,而不是一个局部领域。

       了解了Non-local的定义之后,我们需要知道Non-local是如何操作的,在原文中作者设计了一个Non-local block,通过一系列1x1的卷积和特征图重构点乘来获得全局的注意力机制,这样就可以在原图增加一个有关于全图的注意力机制。

resid中加1 residsnce_深度学习_06


       FastReID中提供了AGW的baseline中就应用了这个操作,在ResNet中加入了Non-local的block,因为ReID任务的输入是行人的全图,这种操作可以提高对整体行人信息的关注度。

resid中加1 residsnce_pytorch_07


对这个方法我也做了一个实验,发现它引入的内存占用量挺大的,对显存需求高,其实大多数注意力机制都存在这个问题。