7.22 京东 Fast-ReID论文阅读
FastReID是京东AI研究中广泛使用的软件系统,有高度模块化和可扩展的设计,有好的可管理的系统配置和工程部署。
FastReID是统一实例重标识库,允许其他人员将其他代码块插入到ReID系统,从而进一步快速的将研究思想转移到生产模型中。提供person reid,partial person reid,vehicle reid。
FastReID的亮点:
模块化和可扩展设计:可以快速实现他们的想法,无需重写数十万行代码。
可管理的系统配置:FastReID支持可选组件,主干头部聚合层损失函数训练策略。
丰富的评估体系:ROC和mINP等,以往都是用CMC评价指标。
工程部署:实现知识蒸馏模块已获得更精确更高效的轻量级模型。
提供最先进的与训练模型:容易扩展到一般的对象检索和人脸识别。
Datasets:Market1501,DuKeMTMC,MSMT17.
FastReID Setting:翻转随机擦除和自动增强对训练图像进行处理。主干:Non-local IBN-ResNet101,Head:gem pooling,Aggregation:bnneck。Harder loss function。
实验结果:
问题定义:训练集和数据集不是同一个环境。
设置:提出跨域方法FastReIDMLT,采用混合标签传输,通过多粒度策略学习伪标签。用源域数据集训练模型,然后用目标域数据集的伪标签对预先训练的模型进行微调。主干:ResNet50,gem pooling,bnneck。使用hard triplet loss。
结果:
数据集:VeRi,VehicleID,VERI-Wild。
整个模型由四个部分组成:图像预处理,主干,聚合和头部。
将图像大小调整到固定大小的图像。Images can be packaged into batched and then input into the network
。使用图像增强(随机擦除,随机补片和剪切等)。在图像中随机选择一个矩形区域,用随机值、另一个图像补片和零值擦除其像素,使模型有效降低过拟合风险,对遮挡具有鲁棒性。自动扩充是基于自动技术实现有效的数据扩充,以提高特征表示的鲁棒性。它使用自动搜索算法来寻找多种图像处理功能(如平移、旋转和剪切)的融合策略。
将图像转化为特征图,使用三种主干网络:ResNet,ResNeXt,ResNeSt。同时还将关注非局部模块和实例BN层。
聚合层的作用是将主干生成的特征图聚合为全局特征图。使用四种聚合方法:最大池化,平均池化,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注意力权重。
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:输出不同类别的概率,为后面模型训练区分不同的类别。
四种损失函数: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表示正对和负对的边界。
Learning rate warm-up:有助于建环模型训练的过早过度适应。有助于保持模型深层的稳定性。
Backbone Freezing:为了重新训练分类网络以满足我们任务的要求,我们使用从任务中收集的数据在ImageNet预训练模型上进行微调。
深层空间重建:有人物图像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。
在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)
新查询图像特征被用于图像检索。
采用常用的CMC和mAP,同时增加两个:ROC和mINP衡量指标。
CMC:cumulative matching cure
mAP:mean Averaage Precision
ROC:Receiver Operating characteristic
mINP:mean inverse negative penalty
提供rank list tool来检索结果。
在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进行推理.
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% |