简单有效的遮挡ReID解决方案(Simple Baseline for Occluded ReID)

Simple-Baseline-4-Occluded-ReID (基础方法,简单有效): https:// github.com/wangguanan/l ight-reid/tree/master/examples/occluded_reid

High-Order-Information-Matters(扩展方法,点更高): wangguanan/HOReID

Paper(论文): CVPR 2020 Open Access Repository

作者主页: https:// wangguanan.github.io/

知乎惯例,先介绍一下背景。

本人在CVPR2020上发了一篇关于遮挡行人重识别(Occluded Re-ID)的文章,并起了一个霸气的名字,叫 High-Order Information Matters [1],翻译成中文就是【高阶信息真管用】,简称简称 HONet。(此处感谢我的 co-authors 给我想出了这么优秀的名字。)

方法非常优雅,点刷的也非常高。对论文和代码感兴趣的同学欢迎移步paper 和 github 。论文和代码开源之后,受到了很多小伙伴的好评,在此感谢Re-ID社区伙伴们的支持与鼓励。

时光荏苒,转眼到了CVPR2021的投稿时间(估计现在已经快出reviews了),近两三个月突然突然收到了很多咨询我论文的邮件。邮件开头一顿赞赏,搞得我很是开心。阅读到邮件末尾,不约而同的都提到了一个问题:那就是能不能把【Baseline】的参数配置详细说明一下,如果能【顺便】把【源代码】给一下就更好了。

敏锐的我立即发现,原来大家是在刷点的路上遇到了困难。本着有求必应的原则,作为一个 Re-IDer,时隔一年,义无反顾的操起了上古代码进行整理,把这块代码开源了出来。在刷点的路上送大家一程。

背景: 什么是遮挡行人重识别(Occluded Re-ID)?非常好理解,就是一个人被遮挡了,你还要识别他是谁。那么 Occluded Re-ID 又有什么难点呢?如下所示,难点有二:

  1. 噪声特征 :遮挡会使得遮挡区域噪声被学习成行人特征,从而影响识别精度。比如如果两个人都被同一个物体遮挡(比如一辆小轿车),那么他们很容易被匹配到一起。
  2. 对齐问题 :遮挡/半身/outlier 会造成不对齐的问题,从而导致本来能算对的距离也是错误的。比如黑色的头部特征和橘黄色的衣服特征显然是不相似的,如果他们计算了特征,那么本来相同的人也会被误认为不同(距离太远了)。
图1 问题分析

实验性能: 好了,介绍完故事背景,我们正式上方法吧。话不多少,先看点到底有多高。

图2 实验结果

其中OONet是本文的方法(既然我CVPR的方法叫 High-Order,那这个方法就叫 One-Order吧,没办法就是这么随意),HONet是本人CVPR2020的工作。看起来点确实高, Occluded-ReID,Partial-ReID 和 Partial-iLIDs 基本碾压了所有2020年之前的工作。在Partial-ReID 和 Partial-iLIDs上,也勉强超过了我 HONet 的精度。真是狠起来连自己都打。

训练阶段: 报完了点,也来讲讲方法。整个方法非常简洁,一共包含3个部分:1个卷积骨架网络(CNN Backbone),和一个基于人体关键点的多头模块(SkeletonMultiHeads),以及目标函数(Objective Function)。

  1. CNN Backbone :把输入的图片(image)编码成特征图(feature map),这里采用了ResNet50或者ResNet50-ibna,当然也可以采用任意 CNN Backbone。为了提取高分辨率特征,我们把 layer4 最后一个卷积层的 stride=1。
  2. SkeletonMultiHeads: 提取基于人体骨骼点模型(Skeleton Model)的局部特征向量(local features)以及全局特征。局部特征通过归一化的骨骼点热图(normalized skeleton heatmap)和均匀池化(average pooling)操作得到。比如,我们要得到头部特征,我们就使用来自第一步的 feature map 和 头部热图进行 pixel-wise 点积操作,然后在进行均匀池化操作,就可以得到头部的局部特征。
  3. Objective Function包含3个
    1. 基于全局+局部特征特分类损失。这里采用 cross-entropy-loss-with-label-smooth,平滑系数设置为 0.1。
    2. 度量损失这里只对全局特征(global feature)使用度量损失,损失函数为 triplet-loss-with-batch-hard [2],margin 设置为 0.35。
    3. 对称损失。考虑到人体的对称性质,我们另人体对称区域骨骼点特征尽可能一致。比如,左右肩膀局部特征尽可能相似。

推理阶段: 我们把所有局部特征进行平均,并与全局特征串联(concat),最后得到一个4096维的特征。最后,使用这个4096维特整进行推理。

总结: 总的来说,我们提出的这个 方法简单 ,训练和推理阶段均 不会明显增加时间效果非常明显 。值得各位研究 occluded-reid 的小伙伴一试。

致谢 :感谢陪我刷点的 co-author 们,杨硕、环宇、成哥等。

参考文献:

[1] Wang, Guan ’an, Shuo Yang, Huanyu Liu, Zhicheng Wang, Yang Yang, Shuliang Wang, Gang Yu, Erjin Zhou, and Jian Sun. 2020. “High-Order Information Matters: Learning Relation and Topology for Occluded Person Re-Identification.” In 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), 6449–58.

[2] Hermans, Alexander, Lucas Beyer, and Bastian Leibe. 2017. “In Defense of the Triplet Loss for Person Re-Identification.” ArXiv Preprint ArXiv:1703.07737.

[3] Luo, Hao, Youzhi Gu, Xingyu Liao, Shenqi Lai, and Wei Jiang. 2019. “Bag of Tricks and a Strong Baseline for Deep Person Re-Identification.” In 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops (CVPRW), 0–0.