行人重识别ReID整理

原创
2023/12/07 11:45
阅读数 137

行人重识别(Person re-identification)也称行人再识别,被广泛认为是一个图像检索子问题,是利用计算机视觉技术判断图像或者视频中是否存在特定行人的技术,即给定一个监控行人图像检索跨设备下的该行人图像。行人重识别技术可以弥补目前固定摄像头的视觉极限,并可与行人检测、行人跟踪技术相结合,应用于视频监控、智能安防等领域。

一般行人重识别具有短时效应,我们需要识别的行人的衣服是一个主要特征,当然衣服只是特征之一,如果该行人更换了衣服,那么行人重识别可能会失效。

它的主要原理如下

首先我们需要一个行人检测系统将原始视频帧中的所有行人全部检测出来,形成一个仓库Gallery,然后我们需要一个待检索的行人的个人图像,称为Probe,将该行人的特征提取出来,在Gallery中进行比对,即进行相似度的度量,大于一定的阈值,即认为在Gallery中检索到了该行人。

数据集

数据集通常是通过人工标注或者检测算法得到的行人图片,目前与检测独立,注重识别。分为训练集、验证集、Query(一堆Probe,待检索的个人照片)、Gallery(图像库)。在训练集上进行模型训练,得到模型参数后对Query与Gallery中的图片提取特征值计算相似度,对于每个Query在Gallery中找出前N个与其相似的图片。训练、测试中人物身份不能重复

数据集分为单帧和序列的。

单帧

序列

挑战

行人重识别目前准确率只能达到90%,不同人脸识别,可以达到99%的准确率,主要原因为

常用的评价指标

  • rank-k:算法返回的排序列表中,前k位存在检索目标则称为rank-k命中。

上图中第一行第一个样本,第一个就击中了,所以它是rank-1击中;第二行第二个样本,它前3都未击中,第四个击中了,它属于前5击中,包括rank-1在那,所以是rank-5击中;第四和第五行都没有前五击中,但是在前10击中,所以它们都是rank-10。这样下来rank-1的概率就为40%,rank-5的概率就为60%,rank-10的概率就是100%。

  • CMC曲线:计算rank-k的击中率,形成rank-acc的曲线

上图是各个算法的rank-k曲线,无论哪种算法,肯定k值越大,准确率越高,这是必然的。

  • mAP曲线:反应检索的人在数据库中所有正确的图片在排序列表前面的程度,能更加全面的衡量ReID算法的性能。

在上图中,如果Gallery有多个Probe1的图片,其中有一张图片在rank-1被击中,另外两张图片分别在rank-4和rank-9被击中。而Probe2在rank-2、rank-5、rank-7被击中,由于Probe1有rank-1的,Probe2只有rank-2的,是否说明Prob1比Prob2好呢?答案是不一定的。

这里我们要计算AP值,在Probe1中,rank-1的概率是1/1,rank-4的概率是2/4(这里包含了rank-1),rank-9的概率是3/9(这里包含了rank-1和rank-4),将rank-1、rank-4、rank-9的概率加起来除以平均数3,就得到了Probe1的AP值为61.1%。同理Probe2的AP值为44.3%。

mAP就是所有Probe AP的平均,由于这里只有两个Probe,故mAP=52.7%。

评价模式

single shot是指gallery中每个人的图像为一张(N=1),而multi shot是指gallery中每个人的图像为N>1张图像。同样在Rank-k下,N越大,得到的识别率越高。

在上图中,single shot只有一个正确答案,在multi shot中有三个正确答案。

single query是指probe中每个人的图像为一张(N=1),而multi query是指probe中每个人的图像为N>1张图像,然后融合N张图片的特征(最大池化或者平均池化)作为最终特征。同样的Rank-k下,一般N越大,得到的识别率越高。

在上图中,single query中有1个待检索的样本,multi query中有3个待检索的样本。

通常,评价ReID模型的性能采用single shot+single query模式

学习方法

  • 传统方法——手工设计特征+距离度量

手工特征:

  1. 颜色空间:RGB、HSV、LAB、XYZ、YCbCr、ELF、ELF16
  2. 纹理空间:LBP、Gabor
  3. 局部特征:SIFT、HOG、SURF
  4. 专用特征:LDFV、Colorlnv、SDALP、LOMO

距离度量:

  1. 常用距离:欧式距离、马氏距离、余弦距离
  2. 度量学习:LFDA、MFA、LMNN、LADF、XQDA、KISSME
  • 深度学习方法
  1. 基于表征学习方法——表征学习的方法没有直接在训练网络的时候考虑图片间的相似度,而把行人重识别任务当作分类问题或验证问题来看待。
  2. 基于度量学习方法——度量学习旨在通过网络学习两张图片的相似度,在行人重识别问题上,表现为同一行人的不同图片间的相似度大于不同行人的不同图片。
  3. 基于局部特征方法
  4. 基于视频序列方法
  5. 基于GAN网络的方法
  • 表征学习

分类损失与验证损失

  1. 分类损失又称ID损失;利用行人的ID作为训练标签来训练模型,每次只需要输入一张图片
  2. 验证损失:输入一对(两张)行人图片,让网络来学习这两张图片是否属于同一个行人,等效于二分类问题
    1.     

分类损失也叫ID损失,只有ID损失的网络称为ID Embedding网络(IDE网络),训练集中行人的ID数为网络的类别数,特征层后接一个分类FC,经过Softmax激活函数计算交叉熵损失,测试阶段使用倒数第二层的特征向量进行检索,分类FC层丢弃

属性损失

  1. 可以同时连接几个属性分类损失增强ReID特征的性能。
  2. 每一个属性损失都是一个分类的交叉熵。
  3. 可以等效于一个multi-task的网络。
  4. 测试阶段将所有分类FC丢弃,只使用ReID特征。

所谓属性损失就是将一个人拆成几个属性部分——头发、衣服、裤子、鞋子......。将同一张图片输入网络,除了对整体进行分类外,还会单独对不同的属性通过FC层进行分类得到单独的输出。

验证损失

每次输入一对(两张)图片,进入同一个孪生(Slamese)网络提取特征,融合两个特征信息计算一个二分类损失(验证损失),训练阶段可以和ID损失一起使用,测试阶段输入两张图片,直接判断两张图片是否属于一个人。

上图中有两个数据集,我们每次在数据集中输入孪生网络一张图片,得到两个特征\(y_i\)\(y_j\),此时通过dropout层得到,然后将进行相减融合,再计算一个二分类损失。

  • 度量学习

度量学习旨在学习出两张图片的相似性,定义一个映射

\(f(x):R^F->R^D\)

将图片从原始域映射到特征域,之后再定义一个距离度量函数

\(D(x,y):R^b×R^D->R\)

来计算两个特征向量之间的距离。最后通过最小化网络的度量损失,来寻找一个最优的映射f(x),使得相同行人两张图片(正样本对)的距离近可能小,不同行人两张图片(负样本对)的距离近可能大。而这个映射f(x),就是我们训练得到的深度卷积网络。

  1. 欧式距离:\(d_{I_1,I_2}=||f_{I_1}-f_{I_2}||_2\)
  2. 余弦距离:\(d_{I_1,I_2}=1-{f_{I_1}⋅f_{I_2}\over ||f_{I_1}||_2||f_{I_2}||_2}\)

在上图中有两张照片,我们首先识别到人的区域,再提取该区域的特征,最终送入到度量学习的损失函数中,这是一个端到端的过程。损失函数的种类有

  1. 对比损失
  2. 三元组损失
  3. 改进三元组损失
  4. 四元组损失
  5. TriHard loss

1、对比损失

每次输入一对(两张)图片,拉近正样本对(y=1)间距离趋于0,推开负样本对(y=0)间距离大于α

上图中就是将两张图片送入一个孪生网络,提取两个特征,再进行距离的对比。然后再进行聚类,聚类函数如下

\(L_c=yd_{I_a,I_b}^2+(1-y)(α-d_{I_a,I_b})_+^2\)           \((z)_+\)表示max(z,0)

上式中的y为标签,表示两张图片中的行人是否是同一个人,为同一个行人的时候为正样本对,y=1,否则y=0。当为正样本对时,上式只有前面的部分\(yd_{I_a,I_b}^2\),即为两张图片距离的平方,损失函数值需要趋近于0,表示两张图片的距离需要无限接近。当为负样本时,上式只有后面的部分\((α-d_{I_a,I_b})_+^2\),同样是损失函数趋近于0,但表示两张图片的距离需要大于α,α为我们手动设置的阈值。

2、三元组损失(Triplet loss)

三元组需要输入三张图片,其中第一张图片为锚点(Anchor),第二张图片为正样本,第三张图片为负样本。

通过学习之后,拉近正样本对间距离,推开负样本对间距离。

\(d_{a,p}+α<d_{a,n}\)

上式中\(d_{a,p}\)为正样本的距离,\(d_{a,n}\)为负样本的距离,我们希望正样本距离比负样本距离小α。则损失函数为

\(L_t=(d_{a,p}-d_{a,n}+α)_+\)

三元组损失无法规范正样本距离的绝对值,我们需要对该损失函数进行改进

\(L_{it}=d_{a,p}+(d_{a,p}-d_{a,n}+α)_+\)

当损失函数趋于0的时候,同时需要正样本距离也尽可能的小。

3、四元组损失

输入四张图片,一对正样本,两张负样本,共3个ID。第一项为正常的三元组损失,第二项为弱推动的三元组损失。

损失函数为

\(L_q=(d_{a,p}-d_{a,n}+α)_++(d_{a,p}-d_{n1,n2}+β)_+\)

四元组也是考虑到三元组没有考虑绝对距离而进行的修正。

4、难例挖掘

传统的度量学习方法是随机采样组成元组样本,但是这样采集的样本通常是一些非常容易识别的样本,不利于训练表达能力强的ReID网络,

上图的正样本的难例,我们不难看出,虽然是同一个人,但是拍摄的角度,距离都有很大的不同;在负样本的难例中,虽然是不同的两个人,但是她们穿着打扮的相似度很高。

5、TriHard loss

TriHard loss的核心思想是:对于每一个训练batch挑选P个ID的行人,每个行人,随机挑选K张不同的图片,即一个batch含有P×K张图片。之后对于batch中的每一张图片a,我们可以挑选一个最难的正样本和一个最难的负样本和a组成一个三元组。首先我们定义和a为相同ID的图片集为A(正样本集),剩下不同ID的图片集为B(负样本集),则TriHard损失为:

\(L_{th}={1\over P×K}\sum_{a∈batch}{(max_{p∈A}d_{a,p}-min_{n∈B}d_{a,n}+α)_+}\)

其中\(max_{p∈A}d_{a,p}\)为最难的正样本对(距离越大的正样本对,越不相似的正样本对),\(min_{n∈B}d_{a,n}\)为最难的负样本对(距离越小的负样本对,越相似的负样本对)。

TriHard loss实现

上图是一个行人的3N*3N(一个人有3张照片,有N个人)的特征距离方阵,红色区域内为同一个人的不同照片(正样本对),绿色区域为不同的人、不同的照片(负样本对)。然后将该方阵重组,将所有的正样本距离放在最左边,负样本距离放在右边,同时我们取每行中最大的正样本-每行中最小的负样本,将结果+α后将所有的结果求和除以3N(总行数),即为最终的结果。

三元组损失并没有去挑最难例,它所有的样本都是一样的,它每一个样本的权重都一样(见上图中的a)。TriHard loss只考虑了极端样本的信息,只使用了最难例的三元组信息,而其他的非难例信息就会丢失(见上图中的b),容易造成局部的梯度特别大,一旦样本标签标注错误的情况下,容易导致网络崩溃。自适应权重损失根据样本对之间的距离计算自适应权重。对于正样本对,距离越大,权重越大;对于负样本对,距离越大,权重越小(见上图中的c),其损失函数为

\(L_3=[m+\sum_{x_p∈P(a)}w_pd(x_a,x_p)-\sum_{x_n∈N(a)}w_nd(x_a,x_n)]_+\)

\(w_p={e^{d(x_a,x_p)}\over \sum_{x∈P(a)}e^{d(x_a,x)}}\)\(w_n={e^{-d(x_a,x_n)}\over \sum_{x∈N(a)}e^{-d(x_a,x)}}\)

这里的\(w_p\)为正样本对的权重,\(w_n\)为负样本对的权重。

局部特征

局部特征是相对于全局特征而言的,全局特征是指每一张行人图片的全局信息进行一个特征抽取,这个全局特征没有任何的空间信息

全局特征的问题

上图中,右边的照片包含了大量的背景信息,而我们是对整张图片提取一个全局信息,会包含这些背景信息,而这些背景区域都是噪声。而全局特征对于行人所在图片中的区域也会有一定的干扰(如我们比较希望行人身体的位置在相同的区域)。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部