![5512a957fb20a4591b0f21a0a9dfd88c.png](https://i-blog.csdnimg.cn/blog_migrate/55bec6d250ab19189b40a214730e540f.jpeg)
毕业之前还是要收拾一下之前的烂摊子。
十一假期重点收拾了一下之前在行人重识别方面的工作,也就是投稿ICCV 2019被骂的狗血临头,一度想要放弃计算机视觉,对自己的人生感到一片灰暗的那个工作,同时结合高继扬博士 @高继扬 的视频行人重识别工作:
jiyanggao/Video-Person-ReIDgithub.com![710ce3a38e471c56e03fe284e1e8c29f.png](https://i-blog.csdnimg.cn/blog_migrate/84e4283607b171fa114fc1964a55f2a6.png)
和罗浩博士 @罗浩.ZJU 的静态图像行人重识别强baseline工作:
michuanhaohao/reid-strong-baselinegithub.com![8de3b4ae7df865f51d0401b89f7ec660.png](https://i-blog.csdnimg.cn/blog_migrate/a9faba6f04a043f3fb1dc5c0277e8040.jpeg)
开发了一套基于视频的视频行人重识别强baseline (其实也就是对tricks进行复制粘贴), 现在用最基本的resnet-50模型单帧提feature然后做帧间平均融合的最基本的模型,在Mars上不用reranking基本已经达到mAP 80% Rank-1 87%,对模型进行更改之后能达到更好的效果,模型还在继续调优,相关的代码和工作应该会在更改后的文章中公布,痛定思痛,万幸ICCV虽然被喷惨了,但审稿人们都很负责,给的意见即中肯又独到。这次不要再急功近利了,好好改吧,多做点真正有贡献的工作。
距离投稿ICCV已经过去半年多了,视频行人重识别上新的工作真如雨后春笋,各benchmark也已经被刷高到不敢看:
![39aa5bbfa5c9072157319cb88b0b46c3.png](https://i-blog.csdnimg.cn/blog_migrate/a0301d3659ea7b04e40d2f441344c7fc.png)
现在开始新的竞品调研,重点看一下这几篇文章:
CVPR 2019:
Attribute-Driven Feature Disentangling and Temporal Aggregation for Video Person Re-Identification
VRSTC: Occlusion-Free Video Person Re-Identification
BMVC 2019:Spatially and Temporally Efficient Non-local Attention Network for Video-based Person Re-Identification
ICCV2019:
Global-Local Temporal Representations For Video Person Re-Identification
TIP:
Adaptive Graph Representation Learning for Video Person Re-identification
开始之前,介绍一下这个项目:
AsuradaYuci/awesome_video_person_reidgithub.com![67751d43c5721694252c7b758d9b4bc3.png](https://i-blog.csdnimg.cn/blog_migrate/ed194d96da2a3aca29bf4bcd6f3146b1.jpeg)
感谢这位仁兄不知疲倦地实时更新视频行人重识别最新学术动态,而且会把论文链接和开源代码link过去,是真爱粉没错了。什么tmd叫有贡献的工作!这tm就叫有贡献的工作!
Attribute-Driven Feature Disentangling and Temporal Aggregation for Video Person Re-Identification (CVPR 2019)
交大和达摩院团队的一个工作,先介绍这篇文章是因为这篇文章跟我投ICCV的文章思想上有很大的撞车,都是想通过利用属性来挖掘特征融合时视频中各帧的空间和时间权重。
先简单的介绍一下视频行人重识别最基本的baseline:
![ccbbca53559ac81e3f52bfe79cdd3cec.png](https://i-blog.csdnimg.cn/blog_migrate/b4e9e7e0af182cff415d1bac32dcaeb8.jpeg)
基本都是通过一个基础网络对每段行人视频中每一帧提feature,然后再对每一帧的feature进行组合,得到最后融合后的特征,组合的方式常见的有:average/max pooling, RNN, soft Temporal Attention 加权平均等等,相关方法[1]中都进行过实验论证。
![6c2910c9864c9cddceba42b722d5fab3.png](https://i-blog.csdnimg.cn/blog_migrate/73d0f09f13fed898b136218f5c2b08da.jpeg)
本文中另辟蹊径,考虑到行人属性对行人图像不同区域质量极为敏感这一特点(比如图像中行人下半身被遮挡了就不能识别行人的下半身衣服颜色),想通过利用属性来做不同帧feature的reweighting,同时由于属性有很多种,所以考虑到要对属性分组讨论,所以设计出如图二的算法框架。将不同的行人属性如衣服颜色、性别、是否带帽子、背包等等分为N组,设计多任务网络,在进行行人重识别任务的同时也进行属性识别。同时对不同组的属性,分别学习每一帧的权重,然后根据这不同组的特征分别融合一个特征出来,最后将不同组的特征和用softmax训出来的全局特征concat起来用作reid度量。
文章一个闪光点是在如何进行属性识别上,由于作者没有目前几个视频行人重识别数据库的属性标注,所以在属性识别这一块作者用了一种Transfer Learning的方法,利用RAP静态行人属性数据库进行迁移学习:
![7a0a08bdafaf9f0aa31ccad11b910c8c.png](https://i-blog.csdnimg.cn/blog_migrate/3337bec808ad7cf1780e2b5f6d62fb53.jpeg)
在迁移学习上,由于作者没有Target数据集即视频行人属性数据库的属性,所以不能采用pretrain+finetuning的方法。而是采用了联合训练的方式,针对source数据集和target数据集在domain上的差异,将两个数据集揉和在一起,利用source(RAP)数据库训练属性识别,同时利用Maximum Mean Discrepancy (MMD)来训练两个数据集之间的feature分布。MMD定义如下:
![69f92c2ea41f1c965cf4064d05ae7e48.png](https://i-blog.csdnimg.cn/blog_migrate/45c683a26dd26c977ce80ace3dd696c2.jpeg)
这个损失函数一定程度上参考了Triplet Loss,其意义也就是,要让属性识别模型做到在一个mini-batch中:一: 同domain的不同的特征之间的距离要尽可能地大,二:不同domain之间地feature要尽可能地近。这种方式理论上讲应该能弥补一些domain差异。
但感觉这个地方论文里很多地方没有讲清楚,可能要等源码公布才可以看的更清晰一点,比如mini-batch是怎么组成的,如果mini-batch中reid数据出现同id的数据,那拉大同id feature之间的距离不是会对reid结果带来影响呢?
作者将属性分为6组:
![3323cccd46dafec24692b8f301c40429.png](https://i-blog.csdnimg.cn/blog_migrate/598022ee6da736c8d83088dfd342e89e.png)
属性识别结束在reid阶段,作者利用视频中不同帧的属性识别confidence做帧间加权,然后每组属性会加权出一个feature。属性识别confidence这样算的,也就是某个属性的概率分布月趋向于确定(二分类为例,(0.01, 0.99)比(0.49, 0.51)更加确定),置信度越高(没毛病):
![6593ead1f65dc960db121703d56a2c68.png](https://i-blog.csdnimg.cn/blog_migrate/bb0d9c605073fa64634009c8841a486a.png)
所以最后的feature concat之后的特征大小是 (6 + 1) * len(single feature),其中的1是用最基本的reid框架(resnet + softmax)学出来的feature,然后作者在MARS,iLIDS和PRID上做了实验,结果还是很不错的:
![2af94b0c4137bfc3947aa8afc521049c.png](https://i-blog.csdnimg.cn/blog_migrate/34f2c6f68048390699aecda0893a50ac.jpeg)
总结一下,本文的亮点要在:
1. 利用属性做行人视频的帧间加权,辅助reid
2. 属性识别阶段的联合训练方法,利用MMD减小domain不同带来的副作用。
这两点都挺值得学习的,其中联合训练这个方法在其它任务中也可以尝试,用于解决训练测试数据集差异过大问题。但读完之后有这样几个地方存在一点疑问:
- 不同属性之间的feature直接concat起来真的好吗?因为之前做过实验我也知道,不同的属性跟行人id之间的关联程度是不一样的,有些属性甚至会负面影响到行人重识别结果,比如背包属性,会更多地关注于视频中行人背向摄像头的帧,因此一些行人正面摄像头的帧的权重就会被设的很低,这样其实是不利于发挥视频行人重识别的优势的。所以对不同属性的feature再进行一次加权会不会更好呢?
- 属性识别部分,感觉代码里可能会有更多的细节论文里没法展开讲。所以期待代码公开。
VRSTC: Occlusion-Free Video Person Re-Identification(CVPR 2019)
计算所的一篇文章,也是我老板博士在的团队,文章题目就可以看出作者想通过缓解视频行人重识别过程中容易出现的遮挡问题以提高重识别的精度,针对视频中出现遮挡的帧,作者没有直接丢弃掉,而是尝试通过生成算法恢复被遮挡区域,以充分利用起行人视频中的每一点信息。
![b491c3ff066aa25e152c377d9e49a844.png](https://i-blog.csdnimg.cn/blog_migrate/16ccc6dd53b0d94c40aa3fc1cdd8397c.jpeg)
具体的流程基本如上图所示,对一段视频中所有的行人图像横向分块,检测不同帧在同一块上的相似度,某帧的某一块相似度过低的话,说明这一块出现了遮挡,然后就要用生成算法将这一块恢复出来。
算法流程如下:
(1)首先如何检测遮挡
作者在检测视频中某些帧是否被遮挡这一部分,采用了一共手工的方法,具体的做法如上图所示,首先将一段视频中的所有帧分成上中下三块,再对每块提特征,然后对每个块在时序这一维度上求均值,然后看每个块特征与均值的偏移程度来衡量这一块是否被遮挡,偏移程度越大说明出现遮挡的概率也就越大。(这个感觉有漏洞,万一一段视频中遮挡的帧要比不遮挡的帧多,那么未遮挡的帧会被认为是异常帧。)
(2)如何恢复遮挡区域
作者提出了一种基于GAN的STCnet用于进行遮挡恢复,具体模型的框架如下(此部分感觉是文章最大的闪光点):
![b6d76cfffd95a401bed8fab98f160eb0.png](https://i-blog.csdnimg.cn/blog_migrate/5dd1429434d9bb9fc24c72df07f012d7.jpeg)
作者用了两个GAN网络来完成图像的恢复,第一个GAN网络Spatial Structure Generator是我们最常见的End2End的GAN,输入一张(1)步骤检测出的遮挡图(遮挡区域像素至0)然后恢复出一张自动补全的图,这个部分纯靠训好的GAN网络自己猜,没有其他额外的信息输入。
在这个基础之上,作者考虑到视频数据的特性,同一段视频中其他未被遮挡的帧也可以用于辅助进行遮挡帧的恢复,所以作者在架构中加入了一个Temporal Attention Generator用于利用多帧信息的一种手段,即用同一视频中完整的行人图像辅助遮挡图像的恢复。
这个利用多帧信息进行恢复的流程也是使用GAN网络,不过作者在此之上加入了Attention,具体如下:
![5251a9b770eb445d380315d9a8a5b03c.png](https://i-blog.csdnimg.cn/blog_migrate/a89569fabf8b66d38e2ae70821e9a6b0.png)
将Spatial Structure Generator恢复出来的区域与其他完整的行人图像的此区域的图像做一个cosine相似度度量,然后按照相似度的大小设计Attention,相似度更高的区域要更受到关注。
(3) 监督策略
因为最后GAN网络还是要为了reId服务,所以在loss设计上,作者在GAN的传统encoder 和decoder loss的基础之上引入了ID Loss,即将行人视频的ID信息也引入到训练过程之中,也算是此类为判别任务设计的生成网络常用的操作了。
(4) 如何做ReId
作者设计的遮挡恢复网络跟reID是完全兼容的,可以直接把生成出来的恢复图放入reID网络就行了。
![ee391623f5c8471b2203c088ca0690e8.png](https://i-blog.csdnimg.cn/blog_migrate/5c9a700a387939c7af1c6752799b950a.jpeg)
这个结果在19年初已经算是很高的结果了。
总结一下,感觉这个工作最大的闪光点在于:
- 利用多帧信息进行遮挡恢复网络的设计,感觉这个工作通用性应该很广的,不光可以用来做reID,感觉应用到目标追踪上其实更为适合。不过reID MOT不分家嘛。
- reID的精度提升很高了,但没想到下一篇BMVC 2019刷到了更高。
读完之后的困惑有以下几点:
- 遮挡检测那部分,如果一段视频中遮挡的帧要比不遮挡的帧多,按照论文中遮挡检测的逻辑未遮挡的帧会被认为是异常帧。这种情况不知道有没有处理,还是默认遮挡属于低概率的异常。
- 其实本身视频行人重识别的性价比就不是很高了(精度/运算量),可能未来真正落地的过程中,单摄像头多帧分析比整段视频分析应用要更为广泛,所以针对遮挡,可能直接丢弃掉低质量帧是一种更好的策略,再用GAN来恢复有点画蛇添足。所以感觉这个工作如果是用到目标追踪上,可能应用前景要远比reid大得多。
Spatially and Temporally Efficient Non-local Attention Network for Video-based Person Re-Identification (BMVC 2019)
MARS的rank1就这样被这几个台湾老哥用non-local block[2]活生生地刷上了90,文章很简单,没有前两篇文章在idea上有很大地亮点,这文章的目的就是刷分,同时证明no-local block这东西比较适合用来做spatial-temporal上的attention,另外作者为了提高计算效率,在Spatial和Temporal上做了一个Reduction的操作,提高了non-local层的计算效率。刷分同时计算增幅不大,开源,结果可复现,简洁明了,我还是很喜欢这样的工作的,直来直去不花里胡哨,且够solid。
刷分的文章一上来就先看一下结果:
![6926d6100404a587738ed2d4bff4dee7.png](https://i-blog.csdnimg.cn/blog_migrate/0bafe92598c5567b23f7a56971467a23.jpeg)
主网络在两个主流数据库上MARS依然是现在的sota,Duke被下面要讲的TIP超过,但也是数一数二的水平,计算加速后的网络精度依然不错,可以作为很好的baseline。
刷分的文章内容倒是没什么太多好讲的,就是将non-local层引入到resnet-50网络中做时间和空间上的attention(no-local层的特性,此处不过将传统的non-local的范围从W * H扩展加入了一个时序维度T,变成了C*H*W,没什么太复杂的设计),具体架构如下图所示:
![6dd6a79492aa5a12ce683f244e7ee67d.png](https://i-blog.csdnimg.cn/blog_migrate/201c57d352d232e776360f3ff6e9a4db.jpeg)
但是non-local这东西计算量太大了,怎么办呢,做优化:
![73c1a6314df2380e46f9ba1e7ccb12e3.png](https://i-blog.csdnimg.cn/blog_migrate/f2ad262e5968bbfed0f5d173345fb711.jpeg)
这一块可以算是除了高分之外这篇文章的闪光点之一吧,为了节省计算量,作者主要做了以下几个工作:
(1) 首先空间上分块,将图像分为多块,默认同一块上的像素差异不是很大,所以块内不重复进行non-local计算,重点针对块间计算。
(2) 在resnet s4之后,送入后面三层non-local层之前,将视频中相邻两帧的feature进行Pool融合,时间维度上减半。
这样时间上得到了很大的节省,精度下降也不是很大。
总结一下,这篇工作的主要亮点在于:
- 敲破MARS 90 rank1的大门
- 验证了non-local在spatial-temporal上的优势
- 代码开源,而且很规范,可以作为强baseline。
槽点倒是真没找到,idea越简单暴力直接,漏洞也就越少。同时提一下这个工作用了帧乱序采样和resnet做后一层卷积stride置为1的方法,这两个trick在我这儿的实验也确实是work的。
Global-Local Temporal Representations For Video Person Re-Identification (ICCV2019)
北大和诺亚合作的一篇文章(话说北大和诺亚合作还真挺多呀,认识的几个做压缩的北大同学和学长们也是在诺亚),这篇文章的主要论点在于进行视频行人重识别时要同时挖掘long-term和short-term的时序信息,作者提出的GLTR模型主要做的也是这一个点。
作者首先给出了一个例子来讲自己的论点:
![c6da091d8e2340869b44da5719dd0d84.png](https://i-blog.csdnimg.cn/blog_migrate/08d057cfe93c2a49f7d42e78c247220b.jpeg)
如果两个人的形态、衣服颜色等等空间特点高度一致的话,很难单纯通过对不同帧之间空间特征的加权来进行id判别。而相邻帧之间的是时序特征,比如人的运动时姿体的状态和运动的速度就可以一定程度上缓解这种特殊情况带来的困扰,所以作者设计了下面的网络:
![c05334ddff0509c962ab602bc04ca090.png](https://i-blog.csdnimg.cn/blog_migrate/7da55ae3b88fb2c5faa4b6b914ca27a9.png)
网络并不是很复杂,首先对一段视频的各帧提feature,然后用三个不同空洞率的时序卷积核沿着时序这个维度进行时序卷积,得到3组时序卷积后的特征,然后将这三组特征concat起来送入了一个跟non-local块很像的Temporal Self-Attention模块进行编码,然后将编码的结果Pool得到结果。
(此处如果backbone选resnet-50那么图中的d应该就是2048,最后的feature大小应该是3d=6144,这么来说跟其他feature为2048的工作来比性能其实挺不公平的。)
总结一下,本文中讲方法的部分篇幅并不大,基本只有3.2 + 3.3加起来差不多只有IEEE模板的一页。本文最大的贡献和亮点应该是在新提出的LS-VID数据库吧,这个采集自15个摄像头而且室内室外摄像头兼备,同时采集了上中下午不同时段的大规模数据库能够很好地弥补现在主流benchmark在不同时段和室内室外跨场景上的短板,期待这个数据库开源!
Adaptive Graph Representation Learning for Video Person Re-identification(TIP)
顶刊的工作确实要扎实许多,不管是Idea还是实验的工作量上讲都比会议论文要solid的多。
文章的大体思想是这样,现在很多reID的文章喜欢对人体图像做分块和对齐,比如PCB,Aligned ReID之类的,但这些工作都只是做了分块,基本都没有考虑过块与块之间的关系。所以作者想要做的是设计一种图算法将这些分块之间关联起来,在构建关系图的时候,作者同时应用到了人体关键点的信息和特征映射关系。(整个工作真的挺复杂的,读完之后有种感觉就是真的有这种操作的必要嘛?而且感觉作者就是有种想往复杂里搞的感觉,也可能是被审稿人逼的吧。)
![3e2f7745cf98f8a3c3991ebcc5b1aea3.png](https://i-blog.csdnimg.cn/blog_migrate/776d214f96e81bf280dbfa71287502b6.jpeg)
(说实话,这篇文章不太想展开细讲,细节确实挺多,工作量确实很大,可以看出作者扎实的基本功和花费的大量心力,但说实话,读完之后感觉文章里面值得借鉴的地方并不是很多。Graph在这里真的有种强行为了用而用的感觉。)
大体框架如上图所示,pipline分了两路,一路是正常的reid baseline,另一路开始了作者所说的分块->以块为节点,pose关键点和特征映射关系为边构建图网络->用GNN挖掘分块间的关系->得到图编码后的特征,(在构建图数据的时候,作者采用了下图中的方法,即以每张图中的分块作为节点,然后利用关键点,以人体关键点属于哪个区域作为边连接生成一张图,再以特征映射关系生成另一张图,然后将两张图结合到一块):
![5480656e0c9d52c351c937fb2fb2e8a0.png](https://i-blog.csdnimg.cn/blog_migrate/d8f45a8c9098aec1785c3a14c10b224b.jpeg)
最后作者将两路特征(正常reid特征+GNN编码特征)Concat到一起用于比对,注意此处,个人感觉消融实验做的有一个漏洞。
![a367cc9207ff1e875e053281f2da6662.png](https://i-blog.csdnimg.cn/blog_migrate/4059f895de5672e7195a289a0eff7801.png)
上图为作者在MARS上的消融实验,作者只比较了在Baseline上添模块后性能的提升效果,而没有将两路单独拆开来分析,既然你最后的feature是Concat一起,那我把它们拆开,比如只保留GNN编码后的这一路,正常reid那一路我不要了,这种情况下的结果如何作者没有给出,但这个很关键,感觉这个才能真正体现文章的核心工作即GNN编码这一路是否真的有用。
再回头来看一下这些数据,(不知道作者从哪儿找了这么高的baseline,这真的是我见过最高的baseline了,)可以看出这些模块之后其实性能提升并不是很大(r1: 87.8->89.8, map:78->81.1),有种雷声大,雨点小的感觉。
模型在几个数据库上的最终结果还是很不错的,尤其是Duke,97的rank1和95的mAP差不多已经杀死比赛了。
![37f5012649c075c3fde5fc4de059a8d0.png](https://i-blog.csdnimg.cn/blog_migrate/4a1f8795761d39d240e7a693d1b2f1ba.png)
总结一下,这篇文章给出超好结果和体现出的巨大工作量决定了这是一篇很难拒掉的文章,作者扎实的基本功和花费的大量心力在这个作品里都得到了很好的体现,我读完之后感觉除了消融实验那部分有一点疑问之外,别的地方也基本都是无懈可击的,但总觉得没什么收获,总感觉这篇文章很多工作很难借鉴,可能还是自己太菜吧,要继续努力学习!
好了,以上就是今年视频行人重识别这一块新增的顶会文章,果然顶会还是有各自的闪光点。小瑕疵都有,但做研究毕竟追求的是瑕不掩瑜,加油,争取自己也能做出那种短平快,真正有意义真正可值得借鉴服用的工作!
Ref:
[1] Gao J, Nevatia R. Revisiting Temporal Modeling for Video-based Person ReID[J]. 2018.
[2] Wang X , Girshick R , Gupta A , et al. Non-local Neural Networks[J]. 2017.