一些想法:关于行人检测与重识别

一些想法:关于行人检测与重识别

陈狄

本文主要是介绍我们录用于 ECCV'18 的一个工作:Person Search via A Mask-guided Two-stream CNN Model. 这篇文章着眼于 Person Search 这个任务,即同时考虑行人检测(Pedestrian Detection)与行人重识别(Person Re-identification),简单探讨了一下行人检测与行人重识别这两个子任务之间的关联性,并尝试利用全景图像中的背景信息来辅助 Re-ID. 最后我们的模型在 CUHK-SYSU 和 PRW 这两个数据集上都取得了不错的效果。

什么是 Person Search?

目前大家的焦点大都集中在 Person Re-ID 之上,比如 CVPR'18 的 Re-ID 相关文章数目就达到了惊人的三十多篇。Person Re-ID 处理的对象:probe image 和 gallery image 都是已经切好块了的,即图像中基本只包含了我们所感兴趣的这个人,其他可能的干扰信息(比如背景、遮挡、另外的行人等)已经尽可能降到了最低。当然了,这是为了创建一个统一的、标准化的研究课题而做的一个实验室环境下的约束。随着 Person Re-ID 的性能被逐渐刷高,是时候考虑一下与实际应用更接近一些的任务了,比如 Person Search.

Person Search 处理的对象中,probe image 与 Re-ID 一样,依然是切好块的图像;而 gallery image 变成了未切块的全景图像,也就是一般相机拍出来的未经过处理的图像。一张全景图像中通常包含了多个行人,如果要将已有的 Re-ID 技术用起来的话,那就得事先找到各个行人在全景图像中的位置。因此,Person Search = Pedestrian Detection + Person Re-ID.

行人检测与行人重识别;图片来自 Zheng et al. [1]

Pedestrian Detection 与 Person Re-ID 两者作为相对独立的课题已经被研究多年,两者的研究现状已经相对比较成熟;因此我认为 Person Search 并不着眼于这两者的具体技术,而应该考虑这两个任务之间相互关系,将这关系中的先验信息融入到模型中去。

那么 Pedestrian Detection 与 Person Re-ID 有什么关系呢?或者说 Person Search 与 Person Re-ID 相比有何不同?本文主要就针对这两个问题给出了两个粗浅的答案。

1. Pedestrian Detection 与 Person Re-ID 的目标函数相互矛盾。

对于一个 Pedestrian Detector 来讲,它的目标是正确地区分一个 proposal 是背景还是行人。理想的情况下,detector 会把所有的背景归为一类,所有的行人归为另一类,不管这个行人他是谁,发型怎么样,衣服包包什么颜色,或高或矮或胖或瘦,描述这些行人的特征向量的距离都必须足够小。因此,detector 关注的是行人之间的共性,比如人体轮廓。

但是 Re-ID 模型就不一样了,它的(训练)目标是正确地区分一个已知是行人的 proposal 是谁。既然要分辨这个行人是谁,那么高矮胖瘦发型衣服之类的信息就变得及其重要了。同时也要求描述不同身份的行人的特征向量的距离尽可能大。因此,Re-ID 模型关注的是行人之间的个性

State-of-the-art 的模型 [2, 3, 4] 都将 detection 与 Re-ID 融合到了同一个框架中, Re-ID 的多分类 loss 与 Faster R-CNN 的二分类 loss 混在一起联合训练,因此不可避免的会碰到目标函数上的矛盾,让可怜的神经网络迷迷糊糊摸不着头脑。于是我们决定:

分成两个模型独立训。。。

是的,简陋粗暴,一点都不优雅。黑是黑了点,好歹还是能抓老鼠的。来看个简单的对比:

表 (a) 描述的是 detector 性能的对比。OIM-ours 是我们用 Pytorch 重新实现的 OIM 模型 [2], 在最终的 person search performance 与论文中的 performance 一致的情况下,它的 detector AP 为 69.5%; 在相同的情况下,我们把 OIM 模型中的 OIMLoss 去掉,用相同的参数仅训练一个 Faster R-CNN, 通过调整 detection threshold 使两者的 recall 相同的情况下,后者的 AP 比前者高了将近 10 个点。 因此可以得出结论一:Re-ID 的分类 loss 会干扰到 detector 的训练。

表 (b) 描述的是在撇开 detector 最终性能的情况下,Re-ID 的 performance 比较。两者都基于 ResNet-50, 以 OIMLoss 为分类 loss; 区别是前者基于 Faster R-CNN, 与 detection loss 一起训练,而后者 IDNetOIM 则是用 ground truth bounding box 训练和测试。后者的 performance 微微高于前者,因此可以得出结论二:Detector 的分类 loss 会干扰到 Re-ID 的分类 loss.

综合两个结论,可以认为 Pedestrian Detection 与 Person Re-ID 这两个任务确实互有干扰。因此我们最终的模型采用了 detector 与 Re-ID feature extractor 分离的策略。尽管这么做是粗糙了点,后续如果能想办法显式地建模两个任务之间的关联性,并融入到 Faster R-CNN 中去,将会是个更有意思的工作。

2. Person Search 有背景!更多的背景!

Person Search 的数据集中都是全景图片,相比 Re-ID 数据集中切好块的图像多了很多背景信息。然而,背景信息对行人重识别是否有用?这个问题却不太好回答,毕竟我们人类自己也搞不太清楚自己是怎么认人的。试想一下,一分钟前我看到了一个推着婴儿车的老人走过,一分钟后我在另一个地点同样看到了一个推着婴儿车的老人经过,那么「婴儿车」这个背景信息很可能会作为一个很强的暗示,使得自己认为这两个老人是同一个人;另一方面,我们的目标是为了「认人」,然而当前这个老人完全可以在你没看到他的时候扔下婴儿车,当我们下一次见到这个老人的时候,「有没有婴儿车」这个背景信息反而成为了我们作出判断的干扰因素。

目前在行人重识别领域,主流观点还是倾向于认为背景信息是一个干扰项,得想办法去掉,比如 CVPR'18 上的两篇文章 [5, 6]。但是 [5] 和 [6] 中却同时有一个相同的发现:将背景完全抹掉,只保留前景行人的话,Re-ID 的 performance 会略微下降。[5] 把这个现象归结为 background-bias, 认为是数据集不够好,得尽量避免这样的 bias; [6] 认为造成这种现象的原因是图像的结构信息和光滑性因去掉了背景而遭到了破坏。这两个解释确实非常有道理,而且两者基于各自的解释所做的处理方案都非常出色。然而,我们是否可以作出一个更加直接更加 spontaneous 的假设,认为「背景信息对 Re-ID 是有帮助的」呢?

本文模型的后半部分即基于这个假设,显式地利用了背景信息并将其融入到最终的表示向量中。模型的大致框架如下图所示。一张全景大图经过 detector 检测到行人后,将 bounding box 扩大 γ倍以获取更多背景区域,从原图中扣出;用预训练好的 FCIS 模型分割出前景行人;接着将 (仅前景,原图) 这个图像对分别送入基于 ResNet50 的 F-Net 与 O-Net 中,前馈至最后一个卷积层后将 feature maps 按 channel 方向级联;用一个 SEBlock 给所有通道分配不同的权重后,作 global average pooling 并投影至一个 L2 标准化的低维空间,得到最终的特征向量。

先来看一个 ablation study:

表格中将 (原图,仅前景,仅背景,扩张 bounding box) 四个元素进行了各种组合的实验,能够得到以下两个结论:

  1. 在仅保留前景的情况下,mAP 比使用原图低了 2.8 个点,这个发现与前文提到的 [5, 6] 中的发现一致;在仅使用背景的情况下,扩张 RoI 能够将 mAP 提升 4.5 个点。因此我们认为背景是一种有用的指示信息。
  2. 同时考虑「前景+扩张后的背景」或者 「前景+扩张后的原图」能够极大地提升性能(其中后者可以认为是在同时考虑前景和背景的情况下强调了一遍前景)。我们最终的模型基于表中最后一行,将 ground truth boundinhg box 替换成 detector 生成的结果后,在 CUHK-SYSU 上的 mAP 和 top-1 accuracy 分别为 83.0 和 83.7.

OK, 那么在已知背景信息有用的情况下,背景信息对模型的影响有多大呢?为了回答这个问题,我们对 SEBlock 生成的 channel weights 进行了一个统计。SEBlock re-weight 的对象既有来自前景信息的通道,也有来自全图,即前景+背景信息的通道,因此生成的 weights 能够一定程度上反映前景信息和背景信息的相对重要程度。对于第 i 个样本,我们分别统计一下三个度量标准:1) 前景通道的权重平均值 Avgi(F); 2) 背景通道的权重平均值 Avgi(O); 3) 排名前20的最大的权重值中,对应于前景通道的权重值的个数 N20(F). 其中 N20(F) 的直方图如下图所示:

基于统计信息我们给出三个观察:

  1. 对于所有的样本 Avgi(F)>Avgi(O) 均成立,说明在 Re-ID 的表示向量中前景信息比既有前景又有背景的全图信息占有更重要的地位。
  2. 对于多数样本而言,最重要的前20个通道来自于前景信息的居多( N20(F)>10 ),结论与上一条相同。
  3. N20(F) 只是略大于 10 而不是极端地偏向 20, 说明最重要的前20个通道中有相当一部分来自全图信息,因此可以认为包含在全图信息中的背景信息的重要性仅略小于前景信息。

OK, 接下来的问题是:引入多少背景信息才合适呢?上文中我们的模型通过将 bounding box 扩大 γ 倍来引入更多的背景信息, γ 的值越大,引入的背景信息越多。其中 γ 都直接设为了 1.3。 γ 取不同值时模型的 performance 变化如下图:

结论:小背怡情,大背伤身!


总结来讲,本文的模型和方法都略显简单粗暴,连 reviewer 给的意见也是 "straightforward", 倒幸好是 "... appreciate the straightforward..."。Anyway, 希望文中大量的分析能够给同行们提供一些好的参考吧。

感谢阅读!

References:

[1] Zheng, L., Zhang, H., Sun, S., Chandraker, M., Yang, Y., Tian, Q.: Person re-identification in the wild. In: CVPR. (2017)

[2] Xiao, T., Li, S., Wang, B., Lin, L., Wang, X.: Joint detection and identification feature learning for person search. In: CVPR. (2017)

[3] Xiao, J., Xie, Y., Tillo, T., Huang, K., Wei, Y., Feng, J.: Ian: The individual aggregation network for person search. arXiv preprint arXiv:1705.05552 (2017)

[4] Liu, H., Feng, J., Jie, Z., Jayashree, K., Zhao, B., Qi, M., Jiang, J., Yan, S.: Neural person search machines. In: ICCV. (2017)

[5] Tian, M., Yi, S., Li, H., Li, S., Zhang, X., Shi, J., … Wang, X.: Eliminating Background-Bias for Robust Person Re-Identification. in CVPR. (2018)

[6] Song, C., Huang, Y., Ouyang, W., & Wang, L.: Mask-Guided Contrastive Attention Model for Person Re-Identification. in CVPR. (2018)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue:使用IDEA开发Vue的相关配置

一、IDEA无法识别.vue文件 1、IDEA 添加Vue插件 2、添加Vue配置 File | Settings | Editor | File Types 找到 HTML 文件 在下面点号 输入*.vue 二、IDEA无法创建.vue文件 1、问题 在开发过程中,发现创建文件的界面,没有vue模板 2、相关配置 Fi…

2024年01月IDE流行度最新排名

点击查看最新IDE流行度最新排名(每月更新) 2024年01月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

基于JAVA的学校热点新闻推送系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新闻留言模块2.4 新闻评论模块2.5 新闻收藏模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 新闻类型表3.2.2 新闻表3.2.3 新闻留言表3.2.4 新闻评论表3.2.5 新闻收藏表 四、系统展…

Mysql基础总结

一、MySql基础 MySQL常见面试题 一、索引相关 (1)什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找。 (2)索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关,…

vue中$nextTick作用和实例

为什么要使用nextTick? vue中DOM更新是异步执行,相当于我们在修改数据的时候,视图是不会立即更新的,会先把新的数据攒一赞,例如假如v-for更新这三个数据item1和item2和item3,按照vue的特性dom更新的特性会…

FPGA项目(13)——基于FPGA的电梯控制系统

1.摘要 随着科技的发展,电梯早在上个世纪就已进入人们的生活。对于电梯的控制,传统的方法是使用继电器——接触器控制系统进行控制。随着EDA技术的发展,FPGA已广泛应用于各项电子设计中,本设计即利用FPGA来实现对电梯控制系统的设…

助力打造智慧数字课堂,基于YOLOv7【tiny/l/x】开发构建教学课堂场景下学生课堂行为检测识别分析系统

近年来,随着行为检测技术的发展,分析学生在课堂视频中的行为,以获取他们的课堂状态和学习表现信息已经成为可能。这项技术对学校的教师、管理人员、学生和家长都非常重要。使用深度学习方法自动检测学生的课堂行为是分析学生课堂表现和提高教…

【LMM 006】LLaVA-Plus:可以学习如何使用工具的多模态Agent

论文标题:LLaVA-Plus: Learning to Use Tools for Creating Multimodal Agents 论文作者:Shilong Liu, Hao Cheng, Haotian Liu, Hao Zhang, Feng Li, Tianhe Ren, Xueyan Zou, Jianwei Yang, Hang Su, Jun Zhu, Lei Zhang, Jianfeng Gao, Chunyuan Li 作…

【大数据面试知识点】Spark的DAGScheduler

Spark数据本地化是在哪个阶段计算首选位置的? 先看一下DAGScheduler的注释,可以看到DAGScheduler除了Stage和Task的划分外,还做了缓存的跟踪和首选运行位置的计算。 DAGScheduler注释: The high-level scheduling layer that i…

大数据 - Hadoop系列《三》- HDFS(分布式文件系统)概述

🐶5.1 hdfs的概念 HDFS分布式文件系统,全称为:Hadoop Distributed File System。 它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集…

(五)分文件编程

文章目录 为什么要引入分文件编程.C文件怎么添加.H文件怎么书写以及如何进行链接.H书写格式:“有头有尾标识符”例如(timer.h) .H链接链接到头文件所在路径的文件夹路径即可 提供一个分文件编程的一种代码最后附上视频演示 为什么要引入分文件编程 C程序…

git的使用基础教程

最近项目在搞自动化测试,需要将各种测试脚本集成到自动化框架里边,这个就需要用到版本管理系统了,下面简单价绍一下git的使用。 首先从官网下载并安装git工具,下面以wins系统为例子说明 https://git-scm.com/downloads wins安装好后&#xff…

灸哥问答:软件架构在软件研发中的作用

软件架构在软件开发中扮演着至关重要的角色。我们在软件研发的过程中,类比于建造一座公寓楼,而软件架构就像是盖楼之前的设计图纸,如果没有设计图纸就直接盖楼,可想而知带来的后果是什么。我对软件架构的作用表现总结如下&#xf…

JS变量和函数提升

JS变量和函数提升 JS变量提升编译阶段执行阶段相同变量或函数 变量提升带来的问题变量容易不被察觉的遭覆盖本应销毁的变量未被销毁 如何解决变量提升带来的问题 JS变量提升 sayHi()console.log(myname)var myname yyfunction sayHi() {console.log(Hi) }// 执行结果: // Hi …

深度学习——PIL和OpenCV

PIL 官方文档 格式互转 opencv cv2.imread() 参数: filepath:读入imge的完整路径 flags:标志位,{cv2.IMREAD_COLOR,cv2.IMREAD_GRAYSCALE,cv2.IMREAD_UNCHANGED} cv2.IMREAD_COLOR:默认参数&…

Attention机制

前置知识&#xff1a;RNN&#xff0c;LSTM/GRU 提出背景 Attention模型是基于Encoder-Decoder框架提出的。Encoder-Decoder框架&#xff0c;也就是编码-解码框架&#xff0c;主要被用来处理序列-序列问题。 Encoder&#xff1a;编码器&#xff0c;将输入的序列<x1,x2,x3……

『番外篇十』SwiftUI 实战:打造一款“五脏俱全”的网络图片显示 App(下)

概览 在上篇文章中,我们初步实现了一款小巧的网络图片显示器。 我们先是创建了 json 数据对应的图片模型,然后将 App 界面“分而治之”划分为独立的三个组件以便“逐个击破”,最后我们将所有这些融合在一起。 不过,目前的实现仍有一些问题。比如我们添加了一层不必要的 …

详解Vue3中的鼠标事件mousemove、mouseover和mouseout

本文主要介绍Vue3中的常见鼠标事件mousemove、mouseover和mouseout。 目录 一、mousemove——鼠标移动事件二、mouseover——鼠标移入事件三、mouseout——鼠标移出事件 下面是Vue 3中常用的鼠标事件mousemove、mouseover和mouseout的详解。 一、mousemove——鼠标移动事件 鼠…

跟着cherno手搓游戏引擎【3】事件系统和预编译头文件

不多说了直接上代码&#xff0c;课程中的架构讲的比较宽泛&#xff0c;而且有些方法写完之后并未测试。所以先把代码写完。理解其原理&#xff0c;未来使用时候会再此完善此博客。 文件架构&#xff1a; Event.h:核心基类 #pragma once #include"../Core.h" #inclu…

JMeter使用

目录 启动JMeter 创建线程组 设置线程参数 设置http请求参数 ​编辑 创建查看结果树(显示成功/失败多少以及返回结果等信息) 创建聚合报告(显示响应时间、吞吐量、异常数等信息) 点击上方的执行按钮即可开始压力测试 结果树显示 聚合报告结果显示 启动JMeter 在JMete…