Person Re-ID相关知识点、数据集及评估指标总结
0. 背景
人脸识别技术
目前已发展的较为成熟,在很多场景与产品中都已有落地的应用,但人脸识别技术只能用到人体的人脸信息,而人体的其他重要信息得不到充分的利用,例如:衣着、姿态、行为
等。另外在应用时必须要有清晰的人脸正面照片,但在很多场景下无法满足要求,例如低头、背影、模糊身形、帽子遮挡等等。行人重识别(Person Re-ID)
技术正好能够弥补人脸识别的这些不足之处,行Person Re-ID能够根据行人的穿着、体态等信息认知行人,对行人目标进行跨摄像头跟踪。这将AI的认知水平提高到一个新的阶段,现在Person Re-ID已成为AI领域的重要研究方向。
1. 知识点
1.1 gallery和probegallery set
– 参考图像集,即公认的标准行人库,测试用;probe set
– 待查询图像集,也叫query set
,测试用。
1.2 single gallery shot和muti gallery shotsingle gallery shot
– 指gallery中每个人的图像为一张(N=1
);muti gallery shot
– 指gallery中每个人的图像为多张(N>1
),同样的rank-1下,一般N越大,得到的识别率越高。
1.3 hard negatives和hard positiveshard negatives
– 相似却不是同一个人hard positives
– 同一个人却在不同图片中无法判别
1.4 re-ranking
2017年的CVPR:《Re-ranking Person Re-identification with k-reciprocalEncoding》
,文章主要提出了基于k-reciprocal编码的方式,对Re-ID的结果进行re-ranking,使得识别结果得到提升。
论文:https://arxiv.org/abs/1701.08398v1
GitHub:https://github.com/zhunzhong07/person-re-ranking
笔记:https://blog.****.net/lwplwf/article/details/84862054
1.5 IDE Baseline
2. 数据集
Market-1501、CUHK03、DukeMTMC-reID
是衡量Re-ID技术的最主流的数据集。
2.1 Market-1501
http://www.liangzheng.org/Project/project_reid.html
郑良等人在论文《Scalable Person Re-identification: A Benchmark》(ICCV 2015)
中提出。
- 该数据集在清华大学校园中采集,图像来自6个不同的摄像头,包含5个高分辨率
(1280x1080 HD,fps: 25)
和1个低分辨率(720x576 SD,fps: 25)
; - 该数据集有
1501
个类别,共36036
张图片,其中训练集有751
个ID:共12936
张,测试集有750
个ID:共19732
张。所以在训练集中,每个ID平均有17.2张
训练图片,在测试集中,每个ID平均包含26.3张
图片; - 每个类别的图片最多能被六个摄像头捕捉,最少能被两个摄像头捕捉;
- 在开放环境中,多摄像头组成的捕捉系统使样本包含多种属性、信息和环境
背景; - Market-1501数据集的图像是由检测器自动检测并切割,包含一些检测误差,较为接近真实使用情况。
2.1.1 Market-1501数据集文件结构:
-
"bounding_box_train"
– 751个ID,12936张图片,训练集; -
"bounding_box_test"
– 750个ID,19732张图片,测试集,也是所谓的gallery
参考图像集; -
"query"
– 750个ID,共3368张图片,即待查询图片。test中750个ID在每个摄像头中随机选择一张图像作为query,因此一个ID的query最多有 6 个,ps:与test中的图不重复,在参考建立自己的数据集时,可以先建好test,然后按需要从test中剪切得到query; -
"gt_query"
– 对query中的每一个图片(3368张),都有"good"和"junk"的标记,为matlab格式,用于判断一个query对应到gallery中的哪些图片是好的匹配(同一个人不同摄像头的图像)和不好的匹配(同一个人同一个摄像头的图像或非同一个人的图像) -
"gt_bbox"
– 人工标注的bounding box,用于判断DPM检测的bounding box是不是一个好的box。DPM检测得到bbox,与人工标注label的bbox计算IoU,如果大于50%,DPM检测的bbox被标记为“good”;如果小于20%,则被标记为“distractor”;否则被标记为“junk”,这意味着该图像对Re-ID的accuracy没有影响。
2.1.2 样本命名规则:0001_c1s1_001051_00.jpg
,
-
0001
表示ID的编号,从0001
到1501
,共1501个ID;前缀为0000
表示误检图片,只有部分身体,或背景区域,共2798张
;-1
表示标注不合格图片,共3819张
,ps:0000
和-1
的ID只分布在test中,即在test中共有6617张噪声图片; -
"c1"
表示第1个摄像头(共有6个摄像头); -
“S1”
表示摄像头的第一个视频片段,每个摄像头采集得到多个片段。相机不能存储非常大的视频,因此将视频分割成同样大小的多个片段; -
“C1S1”
和“C2S1”
,来自2个相机,虽然同为S1
片段,但不一定是同时发生。因为6台相机的启动时间不完全相同。但“C1S1”
和“C2S1”
大致处于同一时期; -
“001051”
表示序列“C1S1”
中的第1051个帧,相机帧率25fps; - 最后两个数字,
01
表示c1s1_001051
这一帧上的第1个检测框,由于采用DPM检测器,对于每一帧上的行人可能会框出好几个bbox。如果是00
,则表示这是手工标注的bbox。
2.1.3 摄像头位置信息:
摄像头编号 | 拍摄方位 |
---|---|
c1 |
楼前的广场 |
c2 |
广场前的绿化带 |
c3 |
通往超市的通道 |
c4 |
广场前的绿化带 |
c5 |
广场前的绿化带 |
c6 |
超市的出入口 |
同一个ID被不同摄像头拍摄到的结果:
2.1.4 数据特点:
(1) 由于摄像头的拍摄角度是固定的,因此一些背景在图片中频繁出现:
-
c1
中的石砖地板 -
c3
中的金属护栏 -
c2、c4、c5
中的绿草坪和自行车 -
c6
中的玻璃门
(2) c6摄像头和其它摄像头的色差、亮度差异:
(3) 肤色人种差异:
数据集包含三个肤色的人种:
其中,训练集中:
- 黄种人(
722个ID
) - 白种人(
26个ID
) - 黑种人(
3个ID
)
(4) 行人外观差异
行人所穿衣服的颜色相对于其它特征能够提供更多的特征信息:
- 数据集中白色衣服出现最频繁;
- 黄色和紫色较为特殊(校服颜色);
- 行人衣服外观原因可能导致正面、背面信息差异较大;
- 行人背包或搬运较大物体,因遮挡导致正面、背面信息差异较大;
- 行人因佩戴墨镜、口罩、帽子等物品,可能导致面部、头部信息丢失;
- 行人因骑自行车导致前后形态差异较大。
1)不同颜色衣服示例:
2)紫色校服示例:
3)行人衣服前后外观差异较大:
4)遮挡导致行人正面、背面信息差异较大:
5)面部、头部信息丢失:
6)骑自行车导致形态出现巨大差异:
2.1.5 其它干扰因素
除了以上行人本身因素引起的特征差异,还有以下因素:
- 摄像头固定,但人在运动,拍摄中,对行人的拍摄角度发生了变化;
- 多个人出现在同一行人图片中;
- bbox剪切原因,导致行人信息部分缺失;
- 标注错误(ID对应错误)。
2.2 DukeMTMC-reID
https://github.com/layumi/DukeMTMC-reID_evaluation
http://vision.cs.duke.edu/DukeMTMC/
DukeMTMC数据集是一个大规模标记的多目标多摄像机行人跟踪数据集。它提供了一个由8个同步摄像机记录的大型高清视频数据集,具有7,000多个单摄像机轨迹和超过2,700多个独立人物。
DukeMTMC-reID是DukeMTMC数据集的行人重识别子集,并且提供了人工标注的bounding box。该数据集提供训练集和测试集。 训练集包含16,522张图像,测试集包含17,661张图像。训练数据中一共有702
人,平均每类(每个人)有23.5张
训练数据。是目前最大的行人重识别数据集,并且提供了行人属性(性别/长短袖/是否背包等)的标注。
2.2.1 目录结构
从视频中每120帧
采样一张图像,得到了36,411张
图像。一共有1,404个人
出现在大于两个摄像头下,有408个人 (distractor ID)
只出现在一个摄像头下。
-
“bounding_box_test”
– 测试集,包含702人
,共17,661张
图像(随机采样,702 ID + 408 distractor ID) -
“bounding_box_train”
– 训练集,包含702人
,共16,522张
图像(随机采样) -
“query”
– 为测试集中的702人
在每个摄像头中随机选择一张图像作为query,共2,228张
图像
摄像头分布
2.2.2 样本命名规则0001_c2_f0046182.jpg
,
-
0001
表示每个人的标签编号; -
c2
表示来自第二个摄像头(camera2),共有8个摄像头; -
f0046182
表示来自第二个摄像头的第46182帧。
CUHK03
https://drive.google.com/file/d/0B7TOZKXmIjU3OUhfd3BPaVRHZVE/view
该数据集在香港中文大学内采集,图像来自2个不同摄像头。该数据集提供 机器检测和手工检测两个数据集。 其中检测数据集包含一些检测误差,更接近实际情况。平均每个人有9.6张训练数据。
3. 评估指标
首位命中率(Rank-1 Accuracy)、Precision & Recall、平均精度均值(Mean Average Precision,mAP)、CMC、ROC
是衡量Re-ID技术水平的核心指标。
3.1 rank-n + precision + recall + AP + mAP
precision和recall都是针对同一类别来说的,并且只有当查询到当前类别时才进行计算。
TP:True Positive
– 将正类预测为正类数FP:False Positive
– 将负类预测为正类数,误检TN:True Negative
– 将负类预测为负类数FN:False Negative
– 将正类预测为负类数,漏检
# 正确被检测的(TP)占所有实际被检测(TP+FP)的比例
precision = 查询返回的正确个数 / 返回的总个数
# 正确被检测的(TP)占所有应该被检测(TP+FN)的比例
recall = 查询返回的正确个数 / 该查询对象在gallery中的总个数
AP为PR曲线的下面积。
AP衡量的是训练出来的模型在单个类别上的好坏,mAP衡量的是模型在所有类别上的好坏。
举例说明:
查询图像(query)在gallery参考图像集中进行比对后,将返回的查询结果排序(距离由小到大),例如:
(1)假设对于查询图像q1,在gallery参考图像集中进行查找,gallery中与q1相似的有5个(确认是同一个人)
经过查询,从gallery中返回10个查询结果(top-10),如下表:
result | Y | N | Y | N | N | Y | N | N | Y | Y |
---|---|---|---|---|---|---|---|---|---|---|
返回图 | img1 | img2 | img3 | img4 | img5 | img6 | img7 | img8 | img9 | img10 |
rank | 1 | - | 3 | - | - | 6 | - | - | 9 | 10 |
precision | 1/1=1 | - | 2/3=0.67 | - | - | 3/6=0.5 | - | - | 4/9=0.44 | 5/10=0.5 |
recall | 1/5=0.2 | - | 2/5=0.4 | - | - | 3/5=0.6 | - | - | 4/5=0.8 | 5/5=1 |
所以,average precision即AP1 =(1+0.67+0.5+0.44+0.5)/ 5 = 0.62
# AP计算代码实现
def voc_ap(recall, precision):
recall = recall[::-1]
precision = precision[::-1]
mrecall = np.concatenate(([0.], recall, [1.]))
mprecision = np.concatenate(([0.], precision, [0.]))
# 计算precision包络
for i in range(mprecision.size - 1, 0, -1):
mprecision[i - 1] = np.maximum(mprecision[i - 1], mprecision[i])
# 计算PR曲线下面积
i = np.where(mrecall[1:] != mrecall[:-1])[0]
ap = np.sum((mrecall[i + 1] - mrecall[i]) * mprecision[i + 1])
return ap
(2)假设第二个查询图像q2,在gallery参考图像集中进行查找,gallery中与q2相似的有3个(确认是同一个人)
经过查询,从gallery中返回10个查询结果(top-10),如下表:
result | N | Y | N | N | Y | N | Y | N | N | N |
---|---|---|---|---|---|---|---|---|---|---|
返回图 | img1 | img2 | img3 | img4 | img5 | img6 | img7 | img8 | img9 | img10 |
rank | - | 2 | - | - | 5 | - | 7 | - | - | - |
precision | - | 1/2=0.5 | - | - | 2/5=0.4 | - | 3/7=0.43 | - | - | - |
recall | - | 1/3=0.33 | - | - | 2/3=0.67 | - | 3/3=1 | - | - | - |
所以,average precision即AP2 =(0.5+0.4+0.43)/ 3 = 0.44
由此,得到AP1、AP2、AP3、...、APm
所以,可以得到mAP =(AP1+AP2+...+APn)/ m
3.2 CMC
Cumulative Matching Characteristics
考虑简单的single-gallery-shot情形,每个查询图像(query)
对应到gallery中只有一个实例。对于每一次查询,将返回的所有结果(gallery samples)
按距离从小到大排序。
CMC top-k accuracy计算如下:Acc_k = 1
,如果从返回的排名top-k的gallery samples包含query identity;Acc_k = 0
,otherwise
这是一个 shifted step function,最终的CMC曲线通过对所有queries的shifted step functions取平均得到。
在single-gallery-shot
情况下,CMC有上述明确的定义,但在multi-gallery-shot
的情况下,它的定义并不明确,因为每个gallery id可能存在多个实例。
Market-1501数据集上,query
和gallery(Market-1501中的bounding_box_test)
可能来自相同的摄像头视角,但是对于每个query,从gallery返回的结果中来自同一个摄像头的gallery samples会被排除掉。对于每个gallery实例,不会只去随机采样一个instance,这就意味着在计算CMC时,query将总匹配到gallery中“最简单”
的正样本,而不关注其它更难识别的正样本(返回的全部gallery samples经排序,再排除掉来自同一个摄像头的gallery samples,最后留下的就是“最简单”的正样本)。
CUHK03数据集上,query
和gallery
集来自不同的摄像头视角。对于每个query,随机地从每个gallery identity中采样一个instance,然后以 single-gallery-shot的方式计算CMC曲线。重复N次采样,最终输出CMC曲线。
所以,在multi-gallery-shot
情况下,CMC曲线评估存在缺陷。因此,也使用 mAP作为评估指标,mAP详见前文。
举个简单的例子:假如在person Re-ID中,现在有1个待查询的图像q1(label为s1),与gallery库中的行人比对后将从gallery中返回的图按得分(距离)从高到低排序(top-10):
情况1 | s1 |
s2 | s3 | s4 | s5 | s6 | s7 | s8 | s9 | s10 |
---|---|---|---|---|---|---|---|---|---|---|
情况2 | s1 | s2 |
s3 | s4 | s5 | s6 | s7 | s8 | s9 | s10 |
情况3 | s1 | s2 | s3 |
s4 | s5 | s6 | s7 | s8 | s9 | s10 |
如果情况1,则rank-1的正确率为100%、rank-2也是100%、rank-5也是100%;
如果情况2,则rank-1的正确率为0%、rank-2为100%、rank-5也为100%;
如果情况3,则rank-1的正确率为0%、rank-2为0%、rank-5为100%;
当待查询的行人有多个时,则取平均值。
例如待查询的行人有3个q1、q2、q3(label分别为s1、s2、s3),同样对每一个查询图像的返回图像都有一个得分(距离)的排序。
(1)如果返回查询结果(top-10)为:
查询图q1 | s1 |
s2 | s3 | s4 | s5 | s6 | s7 | s8 | s9 | s10 |
---|---|---|---|---|---|---|---|---|---|---|
查询图q2 | s2 |
s1 | s3 | s4 | s5 | s6 | s7 | s8 | s9 | s10 |
查询图q3 | s3 |
s1 | s2 | s4 | s5 | s6 | s7 | s8 | s9 | s10 |
即返回结果中,top-1均命中。
那么,rank-1的正确率为(1+1+1)/ 3 = 100%
;rank-2的正确率也为(1+1+1)/ 3 = 100%
;rank-5的正确率也为(1+1+1)/ 3 = 100%
;
(2)如果返回查询结果(top-10)为:
查询图q1 | s2 | s3 | s4 | s5 | s6 | s7 | s8 | s9 | s10 | s11 |
---|---|---|---|---|---|---|---|---|---|---|
查询图q2 | s1 | s2 |
s4 | s5 | s6 | s7 | s8 | s9 | s10 | s11 |
查询图q3 | s3 |
s1 | s2 | s4 | s5 | s6 | s7 | s8 | s9 | s10 |
即返回结果中,q1的top-10中没有命中,q2的top-10命中了但是在第二个命中的,q3的top-10命中了,是在第一个位置命中的。
那么,rank-1的正确率为(0+0+1)/ 3 = 100%
;rank-2的正确率也为(0+1+1)/ 3 = 66.66%
;rank-5的正确率也为(0+1+1)/ 3 = 66.66%
;
3.3 F-score --分类模型的评价指标
对于precision和recall这两个指标,一般情况下,precision高则recall就低,recall高则precision就低。理想情况下是做到两个指标都高,但在实际中则需要根据具体任务做出取舍。一般情况下,在保证recall的条件下,尽量提升precision,但像金融欺诈、医疗领域做癌症检测等领域则是保证precision优先,在保证precision的条件下,尽量提升recall。
因此,很多时候我们需要综合去权衡这两个指标,这就引出了一个新的指标F-score,是综合考虑precision和recall的一个调和结果。β
是用来平衡precision、recall在F-score计算中的权重,取值情况有三种:
β=1
– 表示precision与recall一样重要β<1
– 表示precision比recall重要β>1
– 表示recall比precision重要
一般情况下,取β=1
,称为F1-score,此时计算公式为:
3.4 ROC曲线
receiver operating characteristic curve,简称ROC曲线,又称为感受性曲线(sensitivity curve)
ROC曲线上每个点反映着对同一信号刺激的感受性。
具体到识别任务中就是,ROC曲线上的每一点反映的是不同的阈值对应的FP(false positive)
和TP(true positive)
之间的关系。
https://blog.****.net/lwplwf/article/details/84824633
Reference
https://blog.****.net/zkp_987/article/details/79969512
https://blog.****.net/q295684174/article/details/78723068