1、跨境追踪的简介
跨镜追踪(Person Re-Identification,简称ReID)技术是现在计算机视觉研究的热门方向,主要解决跨摄像头跨场景下行人的识别与检索。该技术能够根据行人的穿着、体态、发型等信息认知行人,与人脸识别结合能够适用于更多新的应用场景,将人工智能的认知水平提高到一个新阶段。
ReID是行人智能认知的其中一个研究方向,行人智能认知是人脸识别之后比较重要的一个研究方向,特别是计算机视觉行业里面,我们首先简单介绍ReID里比较热门的几项内容:
1、行人检测。任务是在给定图片中检测出行人位置的矩形框,这个跟之前的人脸检测、汽车检测比较类似,是较为基础的技术,也是很多行人技术的一个前置技术。
2、行人分割以及背景替换。行人分割比行人检测更精准,预估每个行人在图片里的像素概率,把这个像素分割出来是人或是背景,这时用到很多P图的场景,比如背景替换。举一个例子,一些网红在做直播时,可以把直播的背景替换成外景,让体验得到提升。
3、骨架关键点检测及姿态识别。一般识别出人体的几个关键点,比如头部、肩部、手掌、脚掌,用到行人姿态识别的任务中,这些技术可以应用在互动娱乐的场景中,类似于Kinnect人机互动方面,关键点检测技术是非常有价值的。
4、行人跟踪“ MOT ”的技术。主要是研究人在单个摄像头里行进的轨迹,每个人后面拖了一根线,这根线表示这个人在摄像头里行进的轨迹,和 ReID技术结合在一起可以形成跨镜头的细粒度的轨迹跟踪。
5、动作识别。动作识别是基于视频的内容理解做的,技术更加复杂一点,但是它与人类的认知更加接近,应用场景会更多,这个技术目前并不成熟。动作识别可以有非常多的应用,比如闯红灯,还有公共场合突发事件的智能认知,像偷窃、聚众斗殴,摄像头识别出这样的行为之后可以采取智能措施,比如自动报警,这有非常大的社会价值。
6、行人属性结构化。把行人的属性提炼出来,比如他衣服的颜色、裤子的类型、背包的颜色。
7、跨境追踪及行人再识别ReID技术。
2、ReID数据采集的特点
1、必须跨摄像头采集,给数据采集的研发团队和公司提出了比较高的要求;
2、公开数据集的数据规模非常小;
3、影响因素复杂多样;
4、数据一般都是视频的连续截图;
5、同一个人最好有多张全身照片;
6、互联网提供的照片基本无法用在ReID;
7、监控大规模搜集涉及到数据,涉及到用户的隐私问题。
3、ReID面临的困难
1、遮挡问题;
2、无正脸问题;
3、配饰问题;
4、姿态问题;
5、相机拍摄角度差异大;
6、监控图片模糊不清;
7、室内室外环境变化;
8、行人更换服装配饰,如之前穿了一件小外套,过一会儿把外套脱掉了;
9、季节性穿衣风格,冬季、夏季穿衣风格差别非常大,但从行人认知来讲他很可能是同一个人;
10、白天晚上的光线差异等。
4、ReID 实现思路与常见方案
ReID 从完整的过程分三个步骤:
第一步:从摄像头的监控视频获得原始图片;
第二步:基于这些原始图片把行人的位置检测出来;
第三步:基于检测出来的行人图片,用ReID技术计算图片的距离,但是我们现在做研究是基于常用数据集,把前面图像的采集以及行人检测的两个工作做过了,我们ReID的课题主要研究第三个阶段。
5、多粒度网络(MGN)
5.1、多粒度网络(MGN)设计思路
设计思想是这样子的,一开始是全局特征,把整张图片输入,我们提取它的特征,用这种特征比较Loss或比较图片距离。但这时我们发现有一些不显著的细节,还有出现频率比较低的特征会被忽略。比如衣服上有个LOGO,但不是所有衣服上有LOGO,只有部分人衣服上有LOGO。全局特征会做特征均匀化,LOGO的细节被忽略掉了。
5.2、网络结构原理
MGN的做法,主要是结合全局特征和局部特征,获得更加具有描述力的特征,整个网络框架主要分为3个支路,论文框架如下图所示:
该框架主干网络是ResNet-50,框架共有3个分支,一个是全局分支,两个是局部分支,在ResNet-50的res_conv4_2产生出3个分支。
(1)对于全局分支,在res_conv5_1上下采样,步长为2的卷积层。经过 global max-pooling,以及一个用来降维的1*1卷积层,特征从2048维降到256维。2048维特征去做softmax loss,256维特征去做triplet loss。
(2)对于两个局部分支,操作方法相同,只是第一个局部分支分成两块,第二个局部分支分成3块,在res_conv5_1为了保留原来的局部特征信息,并没有进行下采样,在水平方向均等的分成几块,后面的处理和全局分支一样,2048维依然去做softmax loss,256维特征去做triplet loss。
(3)在测试阶段,特征是所有256维特征的级联。
(4)损失函数主要是分类的softmax损失和用于度量学习的三元组损失。
算法流程:
首先,输入图的尺寸是384×128,我们用的是Resnet50,如果在不做任何改变的情况下,它的特征图谱输出尺寸,从右下角表格可以看到,global 这个地方就相当于对Resnet 50不做任何的改变,特征图谱输出是12×4。
下面有一个part-2 跟 part-3,这是在Res4_1的位置,本来是有一个stride 等于2的下采样的操作,我们把2改成 1,没有下采样,这个地方的尺寸就不会缩小2,所以part-2跟part-3比global大一倍的尺寸,它的尺寸是24×8。为什么要这么操作?因为我们会强制分配 part-2跟part-3去学习细粒度特征,如果把特征尺寸做得大一点,相当于信息更多一点,更利于网络学到更细节的特征。
网络结构从左到右,先是两个人的图片输入,这边有3个模块。3个模块的意思是表示3个分支共享网络,前三层这三个分支是共享的,到第四层时分成三个支路,第一个支路是global的分支,第二个是 part-2 的分支,第三个是part-3的分支。在global的地方有两块,右边这个方块比左边的方块大概缩小了一倍,因为做了个下采样,下面两个分支没有做下采样,所以第四层和第五层特征图是一样大小的。
接下来我们对part-2跟part-3做一个从上到下的纵向分割,part-2在第五层特征图谱分成两块,part-3对特征图谱从上到下分成三块。在分割完成后,我们做一个 pooling,相当于求一个最值,我们用的是Max-pooling,得到一个2048的向量,这个是长条形的、横向的、黄色区域这个地方。
但是part-2跟part-3的操作跟global是不一样的,part-2有两个pooling,第一个是蓝色的,两个part合在一起做一个global-pooling,我们强制part-2去学习细节的联合信息,part-2有两个细的长条形,就是我们刚才引导它去学细节型的信息。淡蓝色这个地方变成小方体一样,是做降维,从2048维做成256维,这个主要方便特征计算,因为可以降维,更快更有效。我们在测试的时候会在淡蓝色的地方,小方块从上到下应该是8个,我们把这8个256维的特征串连一个2048的特征,用这个特征替代前面输入的图片。
5.3、损失函数的设计
Loss说简单也简单,说复杂也复杂也复杂,为什么?简单是因为整个模型里只用了两种Loss,是机器学习里最常见的,一个是SoftmaxLoss一个是TripletLoss。复杂是因为分支比较多,包括global的,包括刚才local的分支,而且在各个分支的Loss设计上不是完全均等的。我们当时做了些实验和思考去想Loss的设计。现在这个方案,第一,从实践上证明是比较好的,第二,从理解上也是容易理解的。
Loss = Triplet Loss + Softmax Loss:
首先,看一下global分支。上面第一块的Loss设计。这个地方对2048维做了SoftmaxLoss,对256维做了一个TripletLoss,这是对global信息通用的方法。下面两个部分global的处理方式也是一样的,都是对2048做一个SoftmaxLoss,对256维做一个TripletLoss。中间part-2地方有一个全局信息,有global特征,做 SoftmaxLoss+TripletLoss。
但是,下面两个Local特征看不到TripletLoss,只用了SoftmaxLoss,这个在文章里也有讨论,我们当时做了实验,如果对细节当和分支做TripletLoss,效果会变差。为什么效果会变差?
一张图片分成从上到下两部分的时候,最完美的情况当然是上面部分是上半身,下面部分是下半身,但是在实际的图片中,有可能整个人都在上半部分,下半部分全是背景,这种情况用上、下部分来区分,假设下半部分都是背景,把这个背景放到TripletLoss三元损失里去算这个Loss,就会使得这个模型学到莫名其妙的特征。
比如背景图是个树,另外一张图是某个人的下半身,比如一个女生的下半身是一个裙子,你让裙子跟另外图的树去算距离,无论是同类还是不同类,算出来的距离是没有任何物理意义或实际意义的。从模型的角度来讲,它属于污点数据,这个污点数据会引导整个模型崩溃掉或者学到错误信息,使得预测的时候引起错误。所以以后有同学想复现我们方法的时候要注意一下, Part-2、part-3的Local特征千万不要加TripletLoss。
对全局特征使用tripletloss,对局部特征使用softmax。此设置的灵感源于粗略到精细的机制,将非归约特征作为粗略信息来学习分类,将归约特征作为具有学习度量的精细信息。
将局部与整体在同一个分支中学习得到的效果并不显著。可能是这个分支共享同一个网络结构。
网络体系结构中的三个分支实际上学习了表示具有不同偏好的信息。具有较大接收场和全局最大池的全局分支从行人图像中捕获了完整但粗糙的特征,并且由第2部分和第3部分分支学到的特征却没有大幅度的卷积和条带的分割部分,但这些特征往往是局部的但很好。具有更多分区的分支将学习行人图像的更好表示。学习不同偏好的分支机构可以将底层的区分信息协作地补充到公共骨干网部分,这就是在任何单个分支机构中提高性能的原因。