作者提供了一个很好的reid baseline:https://github. com/KaiyangZhou/deep-person-reid.
Motivation:
有些特征不能光在一个scale上学,要在不同的scale进行区分,这里的scale指的是不同感受野,作者称为omni-scale, 提出的网络叫Omni-ScaleNetwork(OSNet),其本质就是不同支路有不同的感受野,关注到不同scale的信息,这早就有人做过,而作者为什么就脱颖而出呢?首先作者提了一个unified aggregation gate (AG)对不同scale的信息做不同的加权,其次作者将传统卷积网络利用深度可分离卷积做了分解,然后一层一层的叠加,最终网络相当轻量级,而效果也很好。一个例子说明需要多个尺度而不能仅依靠单个尺度(如全局语义)如下:
其中每组图中,最左边是anchor,中间是TP,右边是普通算法会判定为FP的图像,因为总体上看很像,想仔细区分开需要从不同尺度来看,比如a图从背包看,衣服颜色看都不行,必须看上衣logo才行,b图又要看背包,c图要看携带和衣服logo,d图则要看衣服logo和鞋子。因此,单个尺度是办不到的,必须多尺度,也就是本文讲的omni-scale。
当然,以前也不是没有做多尺度(multi-scale)或多流(multi-stream)的,比如Inception和ResNeXt,而这篇文章和他们都有区别。首先,这篇文章中的多尺度是严格设计过的(式2或图4b);其次,Inception是多个尺度,不同块有不同感受野,但手工mix各块特征,ResNeXt则多流,但每个流都是相同尺度;而最后,Inception和ResNeXt最后mix各块的特征时,要么concat,要么直接add,但我们时设计了AG来自动加权,让网络自己决定哪个尺度更重要。
How?
变普通卷积为深度可分离卷积----节省参数,能做成轻量级网络
深度可分离卷积:
将卷积分解为depthwise卷积和pointwise卷积,即:
变换成
这省了很多参数。而作者进行了一点修改,就是先pointwise再depthwise,即
也就是先增加channel,再降低feature map size。修改后的叫Lite 3*3卷积,结构如下:
多尺度
普通基于残差的单尺度的结构可以表示为:
而本文构建的多尺度版本为:
其中T=4。综上结构可以表示为:这也就是一个block,然后和ResNet那样将这个block一个个的叠加起来,就是最终的网络,而网络结构为:
Unified Aggregation Gate
当然图4中还有一个AG模块(Unified Aggregation Gate)我们没有解释,但这其实就是一个对不同尺度的特征做加权的东西,而且各个stream的AG共享参数。加权过程公式化如下:
其中,
x
t
x^t
xt就是每个stream(尺度)得到的特征,而
G
(
x
t
)
G(x^t)
G(xt)就是将这个特征通过AG网络(各支路共享参数)进行前向传播,计算出一个权重,不过值得注意的是,以前的做法是把这个权重做成一个数,但作者做成了一个向量(设为c1维),对这个支路的特征(设为w1h1c1维)按channel进行加权,最后把四个支路的结果加起来,代码为:
而设计的该AG模块是可微的(反传),而且很简单,如下:
然后就是AG模块的网络结构,也就是G的部分,如下:
实验
在多个数据集上(大小数据集都有)的效果都相当不错
大数据集,如Market1501, CUHK03, DukeMTMC-reID, MSMT17是深度学习ReID的主流;
小数据集,如VIPeR和GRID上效果好,说明网络足够lightweight。
效果如下:
效果都相当傲人
消融
上面的11个模型分别是:
- 本文的模型
- 全卷积网络,比本文好一点,但参数多多了
- ResNeXt类似的结构,多个支路分别学习相同的尺度信息
- 多尺度但是不同尺度的结构不是本文这样的加权(去掉AG),代之以concat和add(其实本文去掉AG后各个特征也是add的,但每个支路特征在channel上经过了AG加权)
- 4中是concat,5中是add
- AG不共享参数
- 本文是对每个特征按channel进行加权,然后各个支路add起来,但6中是之前提到的,每个支路学一个权重值(而不是向量),然后add过程经过这些权重加权。
- 特征的各个通道经过相同的权重加权,最后再不同支路add
- 单尺度
- 双尺度
- 三尺度
当然2最好,但是1效果次好,最轻量化
轻量化
方法的有效性可视化
下图证明本文的方法确实是各个尺度都关注了:
激活图展示:
左中右分别是原图,多尺度,单尺度。而单尺度主要关注脸,但reid图像分别率很低,这种不可靠,本文方法则更合适。
在属性识别上的应用
在分类任务上的应用
跨域
值得注意的是,本文的结构是softmax损失(label smooth)上训练出来的。
文章中还有两个参数,分别是beta和gamma,在表6中调过了,其中gamma决定了图像输入大小,而beta不是很理解,原文是:
不同的gamma和beta参数能得到不同的性能,当然参数也不同,可做trade-off。