7.22 京东 Fast-ReID论文阅读
1. 解决的问题
FastReID是京东AI研究中广泛使用的软件系统,有高度模块化和可扩展的设计,有好的可管理的系统配置和工程部署。
FastReID是统一实例重标识库,允许其他人员将其他代码块插入到ReID系统,从而进一步快速的将研究思想转移到生产模型中。提供person reid,partial person reid,vehicle reid。
2. 模型概述
FastReID的亮点:
模块化和可扩展设计:可以快速实现他们的想法,无需重写数十万行代码。
可管理的系统配置:FastReID支持可选组件,主干头部聚合层损失函数训练策略。
丰富的评估体系:ROC和mINP等,以往都是用CMC评价指标。
工程部署:实现知识蒸馏模块已获得更精确更高效的轻量级模型。
提供最先进的与训练模型:容易扩展到一般的对象检索和人脸识别。
3.实验结果
3.1 Person Re-identification
Datasets:Market1501,DuKeMTMC,MSMT17.
FastReID Setting:翻转随机擦除和自动增强对训练图像进行处理。主干:Non-local IBN-ResNet101,Head:gem pooling,Aggregation:bnneck。Harder loss function。
ROC曲线
实验结果:
3.2 Cross-domain Person Re-identification
问题定义:训练集和数据集不是同一个环境。
设置:提出跨域方法FastReIDMLT,采用混合标签传输,通过多粒度策略学习伪标签。用源域数据集训练模型,然后用目标域数据集的伪标签对预先训练的模型进行微调。主干:ResNet50,gem pooling,bnneck。使用hard triplet loss。
结果:
3.3 Partial Person Re-identification
实验设置:结果:
3.4 Vehicle Re-identification
数据集:VeRi,VehicleID,VERI-Wild。
4. 模型详述
整个模型由四个部分组成:图像预处理,主干,聚合和头部。
4.1 Image Pre-processing
将图像大小调整到固定大小的图像。Images can be packaged into batched and then input into the network
。使用图像增强(随机擦除,随机补片和剪切等)。在图像中随机选择一个矩形区域,用随机值、另一个图像补片和零值擦除其像素,使模型有效降低过拟合风险,对遮挡具有鲁棒性。自动扩充是基于自动技术实现有效的数据扩充,以提高特征表示的鲁棒性。它使用自动搜索算法来寻找多种图像处理功能(如平移、旋转和剪切)的融合策略。
4.2 Backbone
将图像转化为特征图,使用三种主干网络:ResNet,ResNeXt,ResNeSt。同时还将关注非局部模块和实例BN层。
4.3 Aggregation
聚合层的作用是将主干生成的特征图聚合为全局特征图。使用四种聚合方法:最大池化,平均池化,GeM池化,注意力池化。池化层输入是:
X
∈
R
W
×
H
×
C
\mathbf X \in \mathbb R^{W \times H \times C}
X∈RW×H×C。以
f
∈
R
1
×
1
×
C
\mathbf f \in \mathbb R^{1 \times 1 \times C}
f∈R1×1×C。全局特征向量
f
=
[
f
1
,
.
.
.
,
f
c
,
.
.
.
,
f
C
]
\mathbf f = [f_1,...,f_c,...,f_C]
f=[f1,...,fc,...,fC]。
M
a
x
P
o
o
l
i
n
g
:
f
c
=
max
x
∈
X
c
x
A
v
g
P
o
o
l
i
n
g
:
f
c
=
1
∣
X
c
∣
∑
x
∈
X
c
x
G
e
M
P
o
o
l
i
n
g
:
f
c
=
(
1
∣
X
c
∣
∑
x
∈
X
c
x
α
)
1
α
A
t
t
e
n
t
i
o
n
P
o
o
l
i
n
g
:
f
c
=
1
∣
X
c
∗
W
c
∣
∑
x
∈
X
c
,
w
∈
W
c
w
∗
x
Max Pooling: f_c = \max_{x \in \mathbf X_c} x \\ Avg Pooling: f_c = \frac 1 {|\mathbf X_c|} \sum_{x \in \mathbf X_c} x \\ GeM Pooling: f_c = (\frac 1 {|\mathbf X_c|} \sum_{x \in \mathbf X_c} x^{\alpha})^{\frac 1 \alpha} \\ Attention Pooling: f_c = \frac 1 {|\mathbf X_c* \mathbf W_c|}\sum_{x \in \mathbf X_c,w \in \mathbf W_c} w*x
MaxPooling:fc=x∈XcmaxxAvgPooling:fc=∣Xc∣1x∈Xc∑xGeMPooling:fc=(∣Xc∣1x∈Xc∑xα)α1AttentionPooling:fc=∣Xc∗Wc∣1x∈Xc,w∈Wc∑w∗x
α
\alpha
α是控制系数,
W
c
\mathbf W_c
Wc是softmax注意力权重。
4.4 Head
Head 是解决聚合模块生成的全局向量的部分。包括BN Head,线性层Head,Reduction Head。
BN:batch normalization。用于解决内部协变量偏移,因为很困难去训练饱和非线性的模型。给定一系列的特征向量
f
∈
R
m
×
C
\mathbf f \in \mathbb R^{m \times C}
f∈Rm×C,m是batch中采样的数量。特征向量bn可以表示为
f
b
n
∈
R
m
×
C
\mathbf f_{bn} \in \mathbf R^{m \times C}
fbn∈Rm×C:
{
μ
=
1
m
∑
i
=
1
m
f
i
,
σ
2
=
1
m
∑
m
=
1
m
(
f
i
−
μ
)
2
,
f
b
n
=
γ
⋅
f
−
μ
σ
2
+
ϵ
+
β
\begin {cases} \mu = \frac 1 m \sum_{i=1}^m \mathbf f_i,\\ \sigma^2 = \frac 1 m \sum^m_{m=1} (\mathbf f_i - \mu)^2,\\ \mathbf f_{bn} = \gamma \cdot\frac {\mathbf f - \mu} {\sqrt{\sigma ^2 + \epsilon}} + \beta \end {cases}
⎩⎪⎨⎪⎧μ=m1∑i=1mfi,σ2=m1∑m=1m(fi−μ)2,fbn=γ⋅σ2+ϵf−μ+β
γ , β \gamma,\beta γ,β是可训练尺度和变换参数, ϵ \epsilon ϵ是添加到小批量方差中的常数。
Reduction layer:使高纬度特征成为低维度特征,2048dim-> 512 dim.
Decision layer:输出不同类别的概率,为后面模型训练区分不同的类别。
4.5 Loss Function
四种损失函数:CrossEntropy loss,Arcface loss,Circle loss,Triplet loss。
Cross-Entropy Loss:
L
c
e
=
∑
i
=
1
C
y
i
log
y
^
i
+
(
1
−
y
^
i
)
log
(
1
−
y
^
i
)
\mathcal L_{ce} = \sum^C_{i=1} y_i \log \hat y_i + (1-\hat y_i)\log (1- \hat y_i)
Lce=i=1∑Cyilogy^i+(1−y^i)log(1−y^i)
y
^
i
=
e
W
i
T
f
∑
i
=
1
C
e
W
i
T
f
\hat y_i = \frac {e^{\mathbf W_i^T\mathbf f}} {\sum^C_{i=1}e^{\mathbf W_i^T\mathbf f}}
y^i=∑i=1CeWiTfeWiTf,交叉熵损失使预测logit值接近真实值。交叉熵促使最大logit与其他所有的logit之间的差异变大, 这与有界梯度一起降低了模型的适应能力,导致模型对预测过于自信。反过来会导致过拟合。标签平滑使倒数第二层的激活函数靠近正确的类模板,同时远离不正确的类模板。所以可以定义为:
y
i
=
{
1
−
δ
,
j
=
c
,
δ
C
−
1
,
j
≠
c
.
y_i = \begin{cases} 1- \delta, j=c,\\ \frac {\delta} {C-1}, j \neq c. \end{cases}
yi={1−δ,j=c,C−1δ,j=c.
ArcFace Loss:将笛卡尔坐标映射到球面坐标。
W
i
T
f
=
∥
W
i
∥
∥
f
∥
cos
θ
i
\mathbf {W^T_i f}= \mathbf {\|W_i\|\|f\|\cos \theta_i}
WiTf=∥Wi∥∥f∥cosθi,其中
θ
i
\theta_i
θi是
W
i
,
f
\mathbf {W_i,f}
Wi,f之间的角度。通过l2归一化将
∥
W
i
∥
=
1
\|\mathbf W_i\|=1
∥Wi∥=1并且通过l2归一化将嵌入特征f修正re-scale至s,
y
^
i
=
e
s
cos
θ
i
∑
i
=
1
C
e
s
cos
θ
i
\hat y_i = \frac {e^{s \cos \theta_i}} {\sum^C_{i=1}e^{s\cos \theta_i}}
y^i=∑i=1Cescosθiescosθi,为了同时增强类内紧密度和类间差异,ArcFace在类内度量中田家姨姑父家的角度惩罚m:
y
^
i
=
e
s
cos
(
θ
i
+
m
)
e
s
cos
(
θ
i
+
m
)
+
∑
i
=
1
,
i
≠
c
C
−
1
e
s
cos
θ
i
\hat y_i = \frac {e^{s\cos (\theta_i+m)}} {e^{s\cos (\theta_i+m)} +\sum^{C-1}_{i=1,i \neq c}e^{s\cos \theta_i}}
y^i=escos(θi+m)+∑i=1,i=cC−1escosθiescos(θi+m)
Circle Loss
Triplet Loss:保证样本离正对距离近,离负对距离远。 x i a , x i p , x i n x^a_i,x^p_i,x^n_i xia,xip,xin分别代表锚,正样本和负样本。
D
(
x
i
a
,
x
i
p
)
+
m
<
D
(
x
i
a
,
x
i
n
)
D(x^a_i,x^p_i)+m \lt D(x^a_i,x^n_i)
D(xia,xip)+m<D(xia,xin),有N个样本的三元组损失表示为:
∑
i
=
1
N
[
m
+
D
(
g
i
a
,
g
i
p
)
−
D
(
g
i
a
,
g
i
n
)
]
\sum^N_{i=1}[m + D(g^a_i,g^p_i)-D(g^a_i,g^n_i)]
i=1∑N[m+D(gia,gip)−D(gia,gin)]
m表示正对和负对的边界。
4.6 Training Strategy
Learning rate warm-up:有助于建环模型训练的过早过度适应。有助于保持模型深层的稳定性。
Backbone Freezing:为了重新训练分类网络以满足我们任务的要求,我们使用从任务中收集的数据在ImageNet预训练模型上进行微调。
4.7 Distance Metric
深层空间重建:有人物图像x和y,将其特征表示为 x f o r x , y f o r y . \mathbf x ~for~ x,\mathbf y ~for~y. x for x,y for y.尺寸分别为 w x t i m e s h x × d , w y × h y × d w_x\ times h_x \times d,w_y \times h_y \times d wx timeshx×d,wy×hy×d。来自N个位置的总N个空间特征被聚合成矩阵 X = [ x n ] n = 1 N \mathbf X = [\mathbf x_n]^N_{n=1} X=[xn]n=1N,同样构建gallery feature matrix: Y = { y m } m = 1 M ∈ R d × M , M = w y × h y \mathbf Y=\{\mathbf y_m\}^M_{m=1} \in \mathbb R^{d \times M},M=w_y \times h_y Y={ym}m=1M∈Rd×M,M=wy×hy,然后, x n \mathbf x_n xn可以再 Y \mathbf Y Y中找最相似的空间特征进行匹配,匹配得分 s n s_n sn。因此我们试图得到X所有空间特征相对于Y的相似分数,最终匹配分数定义为: s = ∑ n = 1 N s n s = \sum^N_{n=1} s_n s=∑n=1Nsn。
4.8 Post-processing
在Fast ReID中,有两种重排序方法:K-reciprocal coding和Query Expansion。
QE:给定查询图像,使用它查找m个相似的库图像,查询特征定义为
f
q
\mathbf f_q
fq,相似的库特征被定义为
f
g
\mathbf f_g
fg,然后通过对验证后的库特征和查询特征求平均值,构造新的查询特征。新查询特征表示为:
f
q
n
e
w
=
f
q
+
∑
i
=
1
m
f
g
(
i
)
m
+
1
\mathbf f_{q_{new}} = \frac {\mathbf f_q + \sum^m_{i=1}\mathbf f^{(i)}_g} {m+1}
fqnew=m+1fq+∑i=1mfg(i)
新查询图像特征被用于图像检索。
4.9 Evaluation
采用常用的CMC和mAP,同时增加两个:ROC和mINP衡量指标。
CMC:cumulative matching cure
mAP:mean Averaage Precision
ROC:Receiver Operating characteristic
mINP:mean inverse negative penalty
4.10 Visualization
提供rank list tool来检索结果。
4.11 Deployment
在FastReID中设计知识提取模块,实现高精度高效率的轻量级模型。
老师模型深,没有局部模型,有很多技巧,学生模型简单。使用two-stream方法训练该网络,学生模型和教师莫明星分别输出分类器
l
s
,
l
t
l_s,l_t
ls,lt,特征图
f
s
,
f
t
f_s,f_t
fs,ft,希望学生尽可能多的学习教室模型的分类能力,logits学习定义为:
L
l
o
g
i
t
=
∥
l
s
−
l
t
∥
1
\mathcal L_{logit} = \|\mathbf l_s-\mathbf l_t\|_1
Llogit=∥ls−lt∥1
为了保证学生模型和教师模型在特征空间分布上的一致性,采用基于Kullback-Leibler散度的概率知识转移模型对学生模型进行优化:
{
L
P
K
T
=
∑
i
=
1
N
∑
j
=
1
,
i
≠
j
N
p
j
∣
i
log
(
p
j
∣
i
p
i
∣
j
)
p
i
∣
j
=
K
(
f
s
i
,
f
s
j
)
∑
j
=
1
,
i
≠
j
N
K
(
f
s
i
,
f
s
j
)
p
j
∣
i
=
K
(
f
s
i
,
f
s
j
)
∑
j
=
1
,
i
≠
j
N
K
(
f
s
i
,
f
s
j
)
\begin{cases} \mathcal L_{PKT} = \sum^N_{i=1} \sum^N_{j=1,i \neq j} p_{j|i}\log (\frac {p_{j|i}} {p_{i|j}}) \\ p_{i|j} = \frac {K(\mathbf f^i_s,\mathbf f^j_s)} {\sum^N_{j=1,i \neq j}K(\mathbf f^i_s,\mathbf f^j_s)} \\ p_{j|i} = \frac {K(\mathcal f^i_s,\mathbf f^j_s)} {\sum^N_{j=1,i \neq j} K(\mathcal f^i_s,\mathbf f^j_s)} \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧LPKT=∑i=1N∑j=1,i=jNpj∣ilog(pi∣jpj∣i)pi∣j=∑j=1,i=jNK(fsi,fsj)K(fsi,fsj)pj∣i=∑j=1,i=jNK(fsi,fsj)K(fsi,fsj)
K(:,:)代表余弦相似性函数。
同时,学生模型需要reid 损失优化整合网络,总的损失为:
L
k
d
=
L
l
o
g
i
t
+
α
L
P
K
T
+
L
r
e
i
d
\mathcal L_{kd} = \mathcal L_{logit} + \alpha \mathcal L_{PKT} + \mathcal L_{reid}
Lkd=Llogit+αLPKT+Lreid
训练结束,使用
f
s
\mathbf f_s
fs进行推理.
5. 实验复现
Market1501 bagtricks_R50.yml
方法1:
下载
训练
方法2:
方法3:
方法4:
Method | Pretrained | Rank@1 | Rank@5 | Rank@10 | mAP | mINP | metric |
---|---|---|---|---|---|---|---|
BoT(R50)训练 | ImageNet | 94.40% | 98.37% | 98.99% | 86.25% | 60.34% | 90.36% |
BoT(R50)下载 | ImageNet | 93.38% | 97.71% | 98.63% | 85.06% | 59.30% | 89.22% |
BoT(R50-ibn) | ImageNet | 94.36% | 97.75% | 98.78% | 86.55% | 61.79% | 90.46% |
BoT(S50) | ImageNet | 95.28% | 98.16% | 99.82% | 87.97% | 65.50% | 91.62% |
BoT(R101-ibn) | ImageNet | 95.22% | 98.19% | 98.81% | 87.98% | 65.27% | 91.56% |