《High-Order Information Matters Learning》遮挡行人重识别(CVPR2020)

论文解读部分
《High-Order Information Matters: Learning Relation and Topology for Occluded Person Re-Identification》

摘要

研究的问题:遮挡的行人重识别问题

提出的方法:通过高维关系和拓扑信息,以实现判别特征和鲁棒对齐。

方法步骤:

1.使用卷积神经网络作为主干并使用一个关键点检测模型提取语义局部特征。

2.将一张图的局部特征作为图的一个节点,然后通过一个适应的方向图卷积层(ADGC)去处理节点之间的关系信息。通过动态的学习连接边的方向和角度,可以挖掘有意义的特征。

3.将识别问题转变为一个图匹配的问题,通过一个跨图嵌入对齐层(CGEA)去获得拓扑信息,同时直接预测相似值。

引言

遮挡行人重识别的意义:更接近现实情况和非常具有挑战。

图片说明

从图1中可以看出,遮挡在行人重识别任务中存在的示例。

目前主流的方法如(b)所示,基于关键点检测获得局部特征,然后对于局部特征进行匹配判断。但是这种方法还是会受到遮挡的影响,关键点检测的方法在遮挡的情况下也比较容易预测失败,所以在进行具有遮挡的局部特征判别的时候也会产生偏差。

而作者的方法如(c)所示,利用图来建立局部特征的关系模型,然后将对齐当作一个图匹配问题,用以建立拓扑信息,通过同时节点对节点,边对边的对应学习。

相关工作

行人重识别

遮挡的行人重识别研究现状:

1.Zhuo 使用遮挡或者不遮挡的二值分类损失去区别遮挡的图片

2.基于显著图的方法和教师-学生学习方案促进了这些方法

3.Miao 提出了一个局域关节特征对齐的方法去匹配局部候选块,使用了一个基于关键点信息值的方式来判断是否被遮挡

4.Fan 用一个空间通道平行网络来对身体部件特征进行学习

5.Luo 用一个空间迁移模块来转换全身图对齐到部分的人体

部分行人重识别研究

算法介绍

one-order semantic module (S) 一阶语义模块:根据人头关键点的区域提取语义特征

high-order relation module (R) 高阶关系模块:对不同语义特征之间的关系信息进行建模

high-order human-topology module (T ) 高阶人体拓扑图模块:学习鲁棒的对齐和预测相似值

图片说明

Semantic Features Extraction

如图2所示,一阶段语义模块主要由两个部分组成:CNN主干获得特征图,关键点检测模型获得关键点信息,然后结合获得局部特征和全局特征。

由下面的公式表示局部和全局特征的获得:

图片说明

训练特征提取网络的损失函数:

图片说明

High-Order Relation Learning

利用图卷积网络获得高阶关系信息

由于关键点检测也会存在偏差,所以获得的局部特征也是会出现无意义的特征。所以作者提出了一个方向适应的图卷积层(adaptive-direction graph convolutional)用以过滤掉无意义的信息。

一般的图卷积数学上由下面公式定义:

图片说明
A表示邻接矩阵,X表示特征节点,W表示图卷积的参数

什么是有意义的局部特征?

假设是一个有意义的局部特征会和全局特征会比无意义的特征有更高的相似度。

所以整个ADGC层有三个输入:一个全局特征V_g,K个局部特征V_l,和一个预先定义的图(邻接矩阵A)

而ADGC的作用就是调整邻接矩阵A变为A^adp,意味着已经去除了那些无意义的局部特征。

整个模块设计如下图所示:

图片说明
整个过程的公式如下所示:
图片说明
图中的“方框-”表示element-wise subtraction(逐像素相减)

“方框+”表示element-wise add(逐像素相加)

“方框x”表示element-wise multiplication(逐像素相乘)

“圆x”表示matrix multiplication(矩阵相乘)

计算两个输入样本的相似性:

图片说明

High-Order Human-Topology Learning

基于局部特征进行相似性的匹配是常用的方法,

这样的方式针对于那些遮挡严重的样本是无效的。

那么作为融入高阶拓扑信息的图匹配的方式自然的可以在一定程度上解决那些遮挡严重的样本。

但是这种一对一操作不适用于各种多变的情形。

图匹配计算公式:

图片说明

为了解决上面一对一的问题,作者提出了一个Cross-Graph Embedded-Alignment Layer with Similarity Prediction(CGEA)

该模块的输入是两个图片的子图,

输出为嵌入特征,该特征包含语义特征和人体拓扑指导对齐特征。

图片说明
公式上表示:

图片说明

计算两个输入样本的相似性:

图片说明

训练和推测过程

训练损失函数:

图片说明
第一个是在进行局部特征和全局特征的训练:

图片说明
第二个是高阶相关性局部特征的学习:

图片说明
第三个是高阶拓扑特征的学习:

图片说明

测试的过程中,

计算输入样本的相似度:

图片说明

这里有个细节的东西,类似于re-ranking的方式,给定一个查询图片x_q,首先根据这个图片对所有的gallery图片计算相似性s^R,获得前n个相近的的结果。然后在根据公式(13)计算最终的相似度去调整这些前n个结果。

实验

特征提取主干设计:ResNet50,最后一个残差模块步长为1

关键点模型:HR-Net,选择了14个关键点,包含head, shoulders, elbows, wrists, hips, knees, and ankles

训练细节:图片大小256*128

数据增强方式:random horizontal flipping, padding 10 pixels, random cropping, and random erasing

对于遮挡数据进行测试的时候加入color jitter augmentation数据增强方法

实验结果:

图片说明

全部评论

相关推荐

各位前辈好,先说声抱歉,可能又是一篇“求骂醒”的帖子,但我真的需要一个方向。我的情况比大多数人都糟糕:双非软件工程,大四,马上毕业了,0实习经历,0工作经验。秋招根本没参加,原因很傻——我一头扎进了一个自己觉得“挺有意思”的项目里,天真的以为把项目做好工作自然会找上门。现在春招也快结束了,我才如梦初醒,发现简历投出去基本石沉大海。我没有什么能拿出手的背景,唯一能说的就是这个从后端到前端全栈独立开发的电影推荐平台。我知道在各位前辈眼里这大概率就是个小玩具,但我确实是下了功夫去琢磨的,它不是什么网上扒的代码,下面这些是我自己琢磨并落地的东西:项目概况:Spring Boot + MyBatis-Plus + Redis + JWT + MySQL + Vue3(前端是AI辅助生成的)我自己觉得花了心思的几个点:1. 推荐算法落地:没有照搬别人的推荐逻辑。我是基于用户多维行为数据(评分、收藏、浏览时长)去计算标签权重,然后用“评分×log(热度+1)”的公式做加权排序;冷启动场景用热门数据兜底。推荐结果用Redis的ZSet缓存,用户行为一变化就主动删缓存触发重算。2. 缓存体系设计:不是那种“面试八股文背完就扔”的表面理解。我实际遇到了缓存穿透和击穿的问题,然后自己用空值缓存+逻辑过期去解决。热门电影定时预热、批量查询用multiGet减少IO次数,还封装了MyCacheUtils通用模板,让整个项目其他模块也能复用这套缓存逻辑。3. 并发与一致性:用Redis的SET NX EX实现了收藏/点赞的分布式锁,key精确到“用户+操作对象”级别,不是粗粒度的一锁全锁。异常回滚时Redis和MySQL数据一致性问题也思考并落地了。验证码的原子性校验用了Lua脚本来保证。4. 性能是真实数据:我用JMeter做了2000并发的压测,引入Redis缓存体系后,推荐接口平均响应从6466ms降到155ms,吞吐量翻了一倍,缓存命中率干到98%以上。这些数据不是编的,是我自己反复调优跑出来的。说实话,做完这些的时候,看着压测报告我是挺兴奋的,觉得“这也算出活儿了吧”。但现实是,0实习好像成了我简历上的原罪,很多公司直接筛选条件就把我过滤了。所以我想跪求各位前辈指点我几个问题,每一条我都认真看、认真执行:1. 关于简历:0实习的应届生,还有资格谈“项目亮点”吗?我这项目,是不是在专业面试官眼里就是一个“低配版培训项目”?如果这个项目还有救,该怎么在简历上呈现,才能让HR或者面试官至少愿意给我一个电话面试?如果没有,一个0实习的应届生到底该在简历上写什么?2. 关于面试:如何用项目细节证明“我虽然没实习但真的能干活”?我挺怕面试官看到我没有实习经历就直接失去兴趣。真到了面试那一步,我该怎么引导对话,用上面这些技术细节去对抗“没实习=没工程经验”的刻板印象?比如缓存那块,怎么从“我解决了击穿”讲出一个有技术判断力和工程思维的完整故事?3. 关于求职策略:错过了黄金窗口期,现在该冲什么样的公司?大厂我肯定不奢望了。现在这个时间点,我应该去投那些小公司和外包吗?要不要把薪资预期降到最低先入行再说?对于0实习的应届生,什么样的公司是真的有机会让我进去学技术、积累经验的?4. 关于未来:如果现在直接找不到工作,我该怎么办?这段时间我想好了,如果实在是找不到研发岗,我要不要去干测试或者运维先入行?还是找家小公司被压榨一年攒个经验?还是干脆先找个其他工作边干边学等下一轮秋招?我什么建议都能接受。我知道自己起步晚了,代价得自己扛。现在唯一能做的就是面对现实,然后找到一条最有可能逆袭的路。希望前辈们能给我指个方向,即使简单几句“没救了”或者“还能救,去做XXX”我都非常感激。
jiestart:这简历肯定没面试的,你得包装个实习再加一个agent项目才有希望
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务