AlignedReID: Surpassing Human-Level Performance in Person Re-Identification

AlignedReID: Surpassing Human-Level Performance in Person Re-Identification

前言

开题结束了,又要开始肝论文的日子,这次要整理的是旷视2017年的一篇文章AlignedReID,为了防止自己忘记,这次会把代码部分也一起整理出来。这篇文章的创新点主要是利用了行人的局部区域之间的联系实现对行人的对齐,从而减少局部不对齐导致的距离过大

Abstract(可借鉴)

提炼了一下本文的核心:

  • 方法:在提取全局特征(global feature)时加入了局部特征(local feature)
  • 实现:在无监督(extra supervision)下,通过计算两组局部特征之间的最短路径,实现了performs an alignment/matching
  • 在计算图像相似度的时候只使用了全局特征(这个地方为啥会只使用全局特征、而不是融合特征,后面会说)
  • 成果:就是识别率啥的。。。

Introduction(可借鉴)

Introduction部分就相当于一个引入,通过看别人的这部分,有利于我们进行这一部分的写作,那么接下来看一看这边论文的结构吧!

1. 现在行人reid存在的挑战

  • 不同时间和地点识别出来是同一个人
  • 在大数据集中跨摄像头识别同一个人
  • 相册分组
  • 零售店访客分析

2.旧的解决方案

  • 传统:集中在底层的特征 颜色、形状、local descriptors
  • CNN:端到端的方式学习特征 对抗损失、三元损失、增强三元损失、四元损失等损失度量方式

3.存在的一些问题

现在的CNN方法仅学习全局特征,都没有考虑到空间结构(spatial structure),有下面一些弊端:

  • 不准确的行人检测框
  • 模糊的体态
  • 无关的内容信息
  • 相似的行人
    当前的解决思路主要是使用集中于part-based、local feature方法,或者将完整的身体切割成固定的部分,没有考虑到各部分之间的alignment。
    pose estimation需要而外的监督所以也不行

4.我们的方法(重点来了,这就引入了)

本文仍然使用全局变量,但是加入了自动部位对齐(automatic part alignment),且不需要额外的监督或者姿态检测(pose estimation)。
训练阶段共有两个分支,其中局部分支使用最短路径损失来对其局部。
测试阶段,只是用全局特征,忽略局部特征,因为实验发现单用global feature和联合两个特征效果相差不大。
在metric learningsetting下,采用了a mutual learning approach方法,使得两个模型能够互相学习,达到更好的效果。
最后又体现了以下自己的贡献,什么超越人类之类的。。。。

相关工作(后边的内容就不贴论文了,自己打开链接看)

这部分就是介绍这几种方法分别是啥,并且简要说明实现的方法。

1.Metric Learning

深度度量学习(Deep Metric Learning,DML)将原始图片(raw images)转化为嵌入特征(Embedding feature),然后计算他们之间的相似度距离。
使用的一些方法和技巧:

  • 正负样本对,使用三元损失的方法
  • 加入了(hard minning)难样本,会有效果
  • 加入分类损失(softmax loss)到度量损失(metric loss)可以提升速度

2.Feature Alignments

这个地方和我之前整理的那个姿态对齐博客差不多,就不在写了。。。

3.Mutual learning

相互学习就是字面上的互相学习,这篇文章是把相互学习的方法加入到了度量学习中。

4.Re-Ranking

这个地方就是说提出了一个re-ranking方法,融合传统距离(original distance)和乔氏距离(Jaccard distance 好像是这样,我记不清了)

Our Approach

1.AlignedReID

话不多说,直接上图,下面这个就是AlignedReID的整体网络结构:


框架部分主要阐述了以下几点内容:(细节会在代码阶段更详细介绍)

  • 使用单一的global feature作为输入图像的最终输出,在输入阶段为全局变量加入了局部变量
  • 使用L2 distance作为相似度度量
    L2 distance
  • 原始图片经过CNN(这里用的是resnet50)得到一个C×W×H的tensor,也就是feature map(由下面resnet50的结构图可以看出,经过第五层卷积层,输出为2048×7×7)
  • global feature是由feature map直接通过global pooling得到的一个C-d vector
  • 对feature map进行horizontal pooling,得到C×H的local feature,然后通过1×1的卷积核进一步缩小channel的个数
  • 对于每一组local feature通过DMLI(最短路径)求损失
  • 最终,每个行人的损失由global feature和H个loca feature联合表达
  • 两张照片的距离(相似度)= global距离 + local 距离
  • global距离通过L2计算

那么接下来就看一看local 距离如何计算的吧:

  • 两张图片分别被分成了H个部分

  • 假设两张图片分别为F、G,fif_{i}figig_{i}gi分别表示图片的第i行,即第i个vector的大小或者距离

  • 对所有的fif_{i}figig_{i}gi进行归一化处理,使得值出现在[0,1)之间

  • 根据公式可以计算任意两个local feature之间的距离

  • 总共可以得到H×H个d,把它们放到一个H×H的矩阵中,类似上边的右边

  • 两张图片之间的local distance就是从(1,1)到(H,H)最短路径的总和

    需要注意的是论文还提到一点:

  • 最短路径是由corresponding parts的alignment构成的,比如上图的(1,4)

  • 但是non-corresponding parts的alignment也有辅助构建作用

  • 并且无需担心 non-corresponding parts 会对结果产生过多的影响,因为根据公式一,不对齐的部分贡献度很低,因为不对齐的部位距离接近于0。

最后说明了一下如何构建损失函数:

  • 两张图片的相似度由global distance 和 local distance共同决定

  • 使用trihard loss 作为 metric learn loss

  • 对于任意一个样本,需要有两个global distance

    • (难样本)同一个行人的相似度最差的另一张图的global distance,不同行人相似度最近的global distance
    • 这里使用global distance来挖掘hard sample的原因有两点:一是使用global distance或者local distance不会有实质性的区别;二是global distance的计算效率更高
  • 在预测中只使用global feature来计算相似度:使用global和使用local feature效果相似

  • 原因解释:

    • 训练的时候,local feature 已经体现了它的作用,帮助我们探索到了图片中人体的部位和结构
    • 训练时,local feature帮助寻找对应的身体部位,global feature就能更多的专注人体识别,而不会关注于背景导致过拟合

2.Mutual learning for metric learning

使用Mutual learning的原因:

  • 为了增强模型的效果
  • 还有前人在这方面的研究贡献

本文:

  • 同时训练一组student models,相互学习
  • 采取了损失函数联合体(包括下面这些)
    • metric loss:由global、local distance共同决定
    • matric mutual loss:由global distance决定
    • classification loss:
    • classification mutual loss:由KL divergence classification决定

话不多说,继续贴图:

对于mutual learning approach 的结构图:

  • 输入层为N张图像,a batch(N,W,C,H)
  • 经过两个不同的CNN网络 ,global feature进行特征提取,
  • 各自得出两个tensor
    • 一个是关于classification probability的tensor(没有细节)
    • 另一个是batched Feature Distance的tensor,实质上应该是一个N×N的matrix ,由N张图片之间的global feature distance构建了matrix里的每一个值
  • 由上面的4个 matrices,可以构建4个损失值
  • 图中classification mutual loss帮助实现两个模型在classification上的相互教学
  • matric mutual loss 帮助实现两个模型在metric learning(相似性)上的相互教学

接下来从公式的角度来介绍一下mutual learning loss 是如何帮助训练的:

亮点就在于使用了ZG函数(zero gradient function),这个函数在计算梯度的时候可以把变量当做常量进行计算,可以停止在训练阶段的反向回馈。
通过使用这个函数,可以使的第二个主要梯度为0。

优点就在于可以提升convergence,并且提升了accuracy。

总结

本篇文章的亮点主要包括两部分:
一个是使用最短路径求到局部特征损失融合到了全局中;
一个是使用了相互学习的方式,提升了模型的准确度。
那么接下来会把这篇文章使用的算法完整的复现以下,等到这个系列的博客写完之后,我应该会在这个地方贴出来。

[论文笔记]AlignedReID相关推荐

  1. ORB-SLAM3 论文笔记

    ORB-SLAM3 论文笔记 这篇博客 ORB-SLAM3系统 相机模型的抽象(Camera Model) 重定位的问题 图片矫正的问题 视觉惯性SLAM的工作原理 相关公式 IMU初始化 跟踪和建图 ...

  2. 【论文笔记】 LSTM-BASED DEEP LEARNING MODELS FOR NONFACTOID ANSWER SELECTION

    一.简介 这篇论文由IBM Watson发表在2016 ICLR,目前引用量92.这篇论文的研究主题是answer selection,作者在这篇论文基础上[Applying Deep Learnin ...

  3. 最新图神经网络论文笔记汇总(附pdf下载)

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 [导读]近年来,图神经网络变得非常火热,每年顶会在该领域内都会出现大量的研究论文,本文为大家提 ...

  4. [论文笔记] Fast Quality Driven Selection of Composite Web Services (ECOWS, 2006)

    Time: 4.0 hours Jae-Ho Jang, Dong-Hoon Shin, Kyong-Ho Lee, "Fast Quality Driven Selection of Co ...

  5. 论文笔记之:Action-Decision Networks for Visual Tracking with Deep Reinforcement Learning

    论文笔记之:Action-Decision Networks for Visual Tracking with Deep Reinforcement Learning  2017-06-06  21: ...

  6. 光流 速度_[论文笔记] FlowNet 光流估计

    [论文笔记] FlowNet: Learning Optical Flow with Convolutional Networks 说在前面 个人心得: 1. CNN的光流估计主要是速度上快,之后的v ...

  7. 论文笔记 《Maxout Networks》 《Network In Network》

    原文出处:http://zhangliliang.com/2014/09/22/paper-note-maxout-and-nin/ 论文笔记 <Maxout Networks> & ...

  8. 论文笔记:HKMF-T: Recover From Blackouts in TaggedTime Series With Hankel Matrix Factorization

    论文笔记:Hankel Matrix Factorization for Tagged Time Series to Recover Missing Values during Blackouts_U ...

  9. 论文笔记 A Spatial-Temporal Decomposition Based Deep Neural Network for TimeSeries Forecasting

    0 abstract 空间时间序列预测问题出现在广泛的应用中,如环境和交通问题.由于存在特定的空间.短期和长期模式,以及维度的诅咒,这些问题具有挑战性. 在本文中,我们提出了一个用于大规模空间时间序列 ...

最新文章

  1. Spring AOP 增强框架 Nepxion Matrix 详解
  2. mysql简拼_mysql实现汉字换拼音,及汉字转简拼
  3. java数据类型之间的转化
  4. VC++6.0使用GDI++出现'ULONG_PTR'未定义和'token' 未定义的解决办法
  5. python自动化办公培训_python-自动化办公
  6. commons-lang3之StringUtils
  7. CXF 客服端调用报错
  8. 5 呼吸灯verilog与Systemverilog编码
  9. 如何监控oracle的索引是否使用
  10. 更改 Normal 模板 (Normal.dotm)
  11. sip信令跟踪工具sngrep
  12. c 语言翻译软件,分享一款 程序员秒懂 很优雅的翻译软件
  13. Deep Mind 团队论文Playing Atari with Deep Reinforcement Learning复现
  14. 编译错误:找不到工程或库
  15. VR学习(Demo)以及在Unity3D上的项目
  16. Reactor模式详解及 三种模式演变
  17. 内存管理pbuf.h头文件源码解析——LwIP学习
  18. springboot-cache + reds整合
  19. 使用VIA(VCC)制作coco数据集
  20. DNS中的正向解析与反向解析

热门文章

  1. 毕索大学计算机科学怎么样,毕索大学的计算机硕士如何
  2. composer入门教程
  3. php 站内信 类
  4. 如何解决error: failed to push some refs to ‘https://gitee.com/
  5. Kibana常用搜索语法
  6. linux中的批量删除和查找
  7. MIT 黑科技:通过脑电波和手势控制机器人
  8. python制作相册影集_最新的有趣开源,Python制作抖音特有的重影彩色图片!
  9. A071_管理员登录
  10. SHELL DATE 命令详解