【项目实践】多粒度网络MGN-ReID之跨境追踪实践(一)

简介: 【项目实践】多粒度网络MGN-ReID之跨境追踪实践(一)

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)


33ea8027d8227442dd0c759397f01b42.png


5.1、多粒度网络(MGN)设计思路

   设计思想是这样子的,一开始是全局特征,把整张图片输入,我们提取它的特征,用这种特征比较Loss或比较图片距离。但这时我们发现有一些不显著的细节,还有出现频率比较低的特征会被忽略。比如衣服上有个LOGO,但不是所有衣服上有LOGO,只有部分人衣服上有LOGO。全局特征会做特征均匀化,LOGO的细节被忽略掉了。


5.2、网络结构原理

   MGN的做法,主要是结合全局特征和局部特征,获得更加具有描述力的特征,整个网络框架主要分为3个支路,论文框架如下图所示:

300fbc6be75e3f4b112806494d14df23.png

      该框架主干网络是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部分分支学到的特征却没有大幅度的卷积和条带的分割部分,但这些特征往往是局部的但很好。具有更多分区的分支将学习行人图像的更好表示。学习不同偏好的分支机构可以将底层的区分信息协作地补充到公共骨干网部分,这就是在任何单个分支机构中提高性能的原因。

相关文章
|
1月前
|
安全 虚拟化
在数字化时代,网络项目的重要性日益凸显。本文从前期准备、方案内容和注意事项三个方面,详细解析了如何撰写一个优质高效的网络项目实施方案,帮助企业和用户实现更好的体验和竞争力
在数字化时代,网络项目的重要性日益凸显。本文从前期准备、方案内容和注意事项三个方面,详细解析了如何撰写一个优质高效的网络项目实施方案,帮助企业和用户实现更好的体验和竞争力。通过具体案例,展示了方案的制定和实施过程,强调了目标明确、技术先进、计划周密、风险可控和预算合理的重要性。
42 5
|
16天前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
106 30
|
26天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN): 从理论到实践
本文将深入浅出地介绍卷积神经网络(CNN)的工作原理,并带领读者通过一个简单的图像分类项目,实现从理论到代码的转变。我们将探索CNN如何识别和处理图像数据,并通过实例展示如何训练一个有效的CNN模型。无论你是深度学习领域的新手还是希望扩展你的技术栈,这篇文章都将为你提供宝贵的知识和技能。
81 7
|
24天前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
26天前
|
云安全 监控 安全
云计算环境下的网络安全策略与实践
在数字化时代,云计算已成为企业和个人存储、处理数据的重要方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨如何在云计算环境中实施有效的网络安全措施,包括加密技术、访问控制、安全监控和应急响应计划等方面。我们将通过具体案例分析,展示如何在实际场景中应用这些策略,以保护云中的数据不受威胁。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络:从理论到实践
【10月更文挑战第35天】在人工智能的浪潮中,深度学习技术以其强大的数据处理能力成为科技界的宠儿。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,在图像识别和视频分析等领域展现出了惊人的潜力。本文将深入浅出地介绍CNN的工作原理,并结合实际代码示例,带领读者从零开始构建一个简单的CNN模型,探索其在图像分类任务中的应用。通过本文,读者不仅能够理解CNN背后的数学原理,还能学会如何利用现代深度学习框架实现自己的CNN模型。
|
1月前
|
数据采集 网络协议 算法
移动端弱网优化专题(十四):携程APP移动网络优化实践(弱网识别篇)
本文从方案设计、代码开发到技术落地,详尽的分享了携程在移动端弱网识别方面的实践经验,如果你也有类似需求,这篇文章会是一个不错的实操指南。
60 1
|
1月前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
250 1
|
2月前
|
弹性计算 人工智能 运维
Terraform从入门到实践:快速构建你的第一张业务网络(上)
本次分享主题为《Terraform从入门到实践:快速构建你的第一张业务网络》。首先介绍如何入门和实践Terraform,随后演示如何使用Terraform快速构建业务网络。内容涵盖云上运维挑战及IaC解决方案,并重磅发布Terraform Explorer产品,旨在降低使用门槛并提升用户体验。此外,还将分享Terraform在实际生产中的最佳实践,帮助解决云上运维难题。
156 1
Terraform从入门到实践:快速构建你的第一张业务网络(上)
|
1月前
|
监控 安全 网络安全
网络安全新前线:零信任架构的实践与挑战
网络安全新前线:零信任架构的实践与挑战
32 0
下一篇
DataWorks